https://www.acmicpc.net/problem/1059 1059번: 좋은 구간 [9, 10], [9, 11], [9, 12], [10, 11], [10, 12] www.acmicpc.net 사고과정) 1. 우선 입력받은 값들을 오름차순으로 정렬한다 2. 입력받은 값(target)을 기점으로 바로 왼쪽값을 small, 바로 오른쪽값을 big이라 하고 이를 반복문으로 하나씩 접근하면서 할당. 3. 예제 2번의 경우 target = 10 이므로 small = 8, big = 13이 나온다. 하지만 해당 배열 안의 값은 들어가면 안되므로 small++, big--을 해준다. 그러면 small = 9, big = 12이다. 해당 경우들은 (9,10) (9,11) (9,12) (10, 11) (10, 1..
https://www.acmicpc.net/problem/1010 1010번: 다리 놓기 입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트케이스에 대해 강의 서쪽과 동쪽에 있는 사이트의 개수 정수 N, M (0 < N ≤ M < 30)이 주어진다. www.acmicpc.net 고3때 배운 조합 개념이 나온다. nCr을 그냥 코드로 잘 구현하면 된다. 처음엔 nCr이 n! / ( (n-r)! * r! ) 이니까 이걸 그대로 다 구현해서 하니, 메모리 범위를 너무 넘어섬. unsigned long long으로 해도 마찬가지. 그래서 좀 줄여서 생각해본게 n! / n-r! * 1/r!인데.. 아래 코드가 저렇지만 우선 돌려보면 그래도 이 n!하는게 값이 너무 커서 범위 초과..
기존에 배운 구성 관계로 코드를 짠다면, 현재 "Jack Jack"이라는 학생은 동일 학생이니, 내가 lec2.study()를 한다면, lec1에 있는 jack jack이나 lec2에 있는 jack jack이나 다 지능이 1 올라가야하는데, lec1에선 올라가지 않는다. 근데 이 결과는 당연하다. 해당 값들을 call-by-value로 그냥 값을 복사해서 넣어주는 것이니 당연할 수 밖에. 그렇다면, 이걸 하고 싶다면? 포인터를 이용해보는 것이 적당해보인다. _____________________________________________________________________________________________________________________________ 값을 포인터로 줬기 때문에..
단순히 이렇게 보면 뭔 소리인지 모르니, 관계 하나하나씩 코드를 보면서 이해해보도록 해보자. 우선 이 포스트에서 다룰 건 구성(composition)관계이다. Monster.h와 Position2D.h를 집중해서 보자. Monster 클래스가 다른 헤더파일에 있는 Position2D클래스를 가져와서 사용하고 있다. 그런데 이 관계를 잘 생각해보자. Monster 객체 하나가 생성되고 나서, Monster 객체가 Positition2D 클래스에 영향을 끼치는가? 아니다. 그저 값들을 가져와서 사용할 뿐이다. 즉, 멤버의 존재만 관리할 뿐이다. 내가 Monster1과 Monster2 각각 객체를 생성해서 활용한다한들, 각 객체 안의 Position2D 객체는 거기 안에서 독립적으로 작용한다. 서로 영향을 끼..
https://www.acmicpc.net/problem/1546 1546번: 평균 첫째 줄에 시험 본 과목의 개수 N이 주어진다. 이 값은 1000보다 작거나 같다. 둘째 줄에 세준이의 현재 성적이 주어진다. 이 값은 100보다 작거나 같은 음이 아닌 정수이고, 적어도 하나의 값은 0보 www.acmicpc.net #include #include using namespace std; int main() { int n; cin >> n; int* arr = new int[n]; for (int i = 0; i > arr[i]; int max = *max_element(arr, arr + n); double sum = 0; for (int i = 0; i < n; i++) { s..
https://www.acmicpc.net/problem/1453 1453번: 피시방 알바 첫째 줄에 손님의 수 N이 주어진다. N은 100보다 작거나 같다. 둘째 줄에 손님이 들어오는 순서대로 각 손님이 앉고 싶어하는 자리가 입력으로 주어진다. www.acmicpc.net 사고과정) 1. 원하는 자리들에 1을 넣어줌. 2. 전체 자리를 살펴보면서, 0이 아닌 경우(즉, 자리가 있는 경우)의 수를 셈. 3. 만약 처음 들어온 사람 수 == 자리 있는 경우 라면, 중복이 없는 경우이니 그냥 0출력. 4. 만약 처음 들어온 사람 수 != 자리 있는 경우 라면, 중복이 있는 경우이다. 이럴 때 중복된 사람 수 를 출력해야하니 (처음 들어온 사람수 - 사람이 있는 자리 수)를 하면, 거절 당한 사람 수겠지. #..
https://www.acmicpc.net/problem/1259 1259번: 팰린드롬수 입력은 여러 개의 테스트 케이스로 이루어져 있으며, 각 줄마다 1 이상 99999 이하의 정수가 주어진다. 입력의 마지막 줄에는 0이 주어지며, 이 줄은 문제에 포함되지 않는다. www.acmicpc.net 수식으로도 풀 수 있긴 한데 한 번 string을 이용해 풀어보았다. string을 input으로 받고, 이걸 역순으로 back이라는 string을 만들어 저장. 그리고 이 두 string을 인덱스를 따라 비교하다가 글자가 다르면 "no"출력 하고 함수종료. 다 비교했는데 문제없으면 "yes"출력하고 함수 종료. #include #include using namespace std; void Palindrome(s..
https://www.acmicpc.net/problem/1157 1157번: 단어 공부 알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다. www.acmicpc.net 사고과정) 문자열들을 입력받고, 문자열의 알파벳 갯수에 따라 알파벳순으로 정렬한 배열을 만든다. int array[26] = {0}으로 초기화하고, 갯수들을 넣어주면 됨. 그런다음, 가장 많은 갯수에 해당하는 알파벳을 찾고 (여기선 *max_element를 활용) 가장 많은 갯수가 중복되면, ?을 출력. 아니면 그냥 해당 알파벳을 출력해주면 된다. #include #include #include #define NUM 26 usin..