Class 2 37

[백준 1259] 팰린드롬수 [C]

풀이 문자열의 길이를 알아내 문자열의 양끝을 비교하는 방식으로 문제를 해결할 수 있다. 무의미한 0이 주어지지 않으므로, num[0]의 값이 0이면 반복문을 빠져나온다. 소스코드 #include #include int main(){ char num[6]; while (scanf("%s", num) && num[0] != '0') { int len = strlen(num), palin = 1; for (int i = 0; i < len/2; i++) if (num[i] != num[len - 1 - i]){ palin = 0; break; } puts(palin ? "yes" : "no"); } } 출처 1259번: 팰린드롬수 입력은 여러 개의 테스트 케이스로 이루어져 있으며, 각 줄마다 1 이상 9999..

[백준 1018] 체스판 다시 칠하기 [C]

풀이 N * M 크기의 보드를 2차원 배열로 입력받고, (0, 0), (0, 1), (0, 2), ... 각 요소들을 기준으로 8 * 8크기의 보드를 수정해 체스판을 만들 때, 몇 개의 칸이 수정되어야 생성되는지 최소값을 기록하는 방식으로 해결할 수 있다. 맨 처음 시작좌표인 (0, 0)을 기준으로 다음과 같은 체스판을 생성하기 시작한다고 가정한다. (빨간 사각형) 기준이 되는 시작 좌표는 (row, col)이며, 이 값을 가상의 보드를 생성하는 함수로 복사한다. 시작 좌표를 기준으로 (row ~ +7, col ~ +7)의 범위 (빨간 사각형) 안에서, 체스판을 생성할 때 최소 몇개의 칸이 수정되는지 확인 검정칸 이어야 하는 곳((i + j) % 2 == 0)이 검정칸이면, white++, 아니면 bla..

[백준 2164] 카드2 [C]

풀이 본래 Queue를 이용해 푸는 문제지만, 다음과 같은 규칙성이 존재해 간단하게 풀이했다. N이 1일때, 결과가 1이다. N >= 2 일때, N에서 N보다 작은 2의 제곱을 뺀 값에 2를 곱해준 값이 결과와 일치한다. 65~128까지의 N은 N보다 작은 2의 배수인 64를 뺀 값에 2배를 곱하여 출력할 것이다. 129 ~ 256의 N또한 마찬가지로 N보다 작은 2의 배수인 128를 뺀 값에 2배를 곱하여 출력할 것이다. 소스코드 #include int main(){ int N, sq = 1; scanf("%d", &N); for (; sq

[백준 10814] 나이순 정렬 [C]

풀이 나이와 이름을 등록할 수 있는 구조체를 만들어 사용하자. 나이가 같을 경우 등록된 순서대로 출력을 해주어야 하기 때문에 다음과 같은 방법을 생각해 볼 수 있다. 구조체 내부에 order변수를 선언해서 등록 순서를 입력 조금은 복잡하지만 구조체 배열의 인덱스를 활용하여 메모리를 절약 등록순서 1 2 3 4 5 6 7 " " 나이 20 21 20 23 21 20 23 " " 하지만, 나이를 고려하지 않을 경우 이미 등록 순서는 오름차순으로 정렬되있다, 때문에 추가로 정렬을 해주지 않고, 가장 적은 나이에서 가장 많은 나이까지 분류를 하여 출력해주는 방식으로 해결했다. 등록순서 1 3 6 나이 20 20 20 등록순서 2 5 나이 21 21 등록순서 4 7 나이 23 23 소스코드 #include #in..

[백준 10866] 덱 [C]

풀이 Deque(Double Ended Queue)는 Stack와 Queue의 특징을 모두 갖는 이중 연결 리스트(Doubly Linked List)의 구조이다. 쉽게말해 방향이 반대인 Stack 두개를 붙인 것과 같다. 역방향 Stack 0 1 " " " 4998 4999 front 정방향 Stcak 5000 5001 " " " 10000 10001 rear 역방향 Stack과 정방향 Stcak를 합치고, 중간 index(4999~5000)에서 front를 감소, rear를 증가시키는 방식으로 구현했다. 0 1 " " " 4998 4999 5000 5001 " " " 10000 10001 front rear 단, front와 rear이 일치하는 경우는 없다는 점에 유의하자. front + 1이 rear..

[백준 9012] 괄호 [C]

풀이 입력되는 괄호가 쌍을 이루는지 묻는 문제이다. 괄호의 개수가 같아도 항상 쌍을 이루는 것이 아님을 유의하자. ex) : ( ) ) ) ( ( ( ) stack 구조에서 top변수를 통해 몇 개의 값을 가지고 있는지 알 수 있었다. 이번 문제에서도 top변수를 이용해 '('와 ')'의 구성비를 알아내 문제를 해결할 수 있다. '('일 때 top++, ')'일 때 top-- 를 하여 stack 구조를 이용한다. (top == 0 일 때 VPS이다.) '('가 ')'보다 적으면 VPS가 아니고 (top == -1), '('가 ')' 보다 많을 때도 VPS가 아니다.(top > 0) 따라서 , top가 0이 아니면 VPS가 아님을 알 수 있다. 소스코드 #include #include int main() ..

[백준 10250] ACM 호텔 [C]

풀이 반복문을 두 개 사용할 때, W를 이용해서 방 번호를 알아낼 수 있지만. N의 범위는 H * W이하이고, N을 H로 나눌때의 몫과 나머지를 이용하므로 간단하게 해결할 수 있다. "%d0%d" 형식으로는 오답 처리 된다. 전부 숫자로 출력해주자. N%H == 0일 때는 층 수랑 방 수에 대한 계산을 다르게 구해야 한다. 소스코드 #include int main(){ int T, H, W, N; scanf("%d", &T); while (T--){ scanf("%d %d %d", &H, &W, &N); if (!(N%H)) printf("%d%02d\n", H, N/H); else printf("%d%02d\n", N%H, N/H+1); } } 출처 10250번: ACM 호텔 프로그램은 표준 입력에서 ..