자료구조
[백준] 2164. 카드2 풀이
hch06
2025. 2. 2. 20:33
https://www.acmicpc.net/problem/2164
자료 구조 중 큐를 이용하여 문제를 해결하였다. 배열(arr)에 1부터 N까지의 숫자를 저장한 후 다음과 같은 과정을 N-1번 반복한다.
1. 첫번째에 있는 숫자 삭제
2. 마지막 숫자 + 1 지점에 첫번째에 있게된 숫자를 저장
3. 첫번째에 있게 된 숫자 삭제
최종적으로 나오는 숫자는 2*(N-1)번째에 오게 되므로 해당 인덱스의 숫자를 출력함으로써 문제를 해결한다.
C
더보기
#include <stdio.h>
void push(int arr[], int* s, int* e, int v){
arr[*e] = v;
*e += 1;
}
void pop(int arr[], int* s, int* e){
arr[*s] = 0;
*s += 1;
}
int main() {
int arr[1000005] = {0,};
int n; scanf("%d", &n);
for(int i = 1; i <= n; i++) arr[i-1] = i;
int s = 0, e = n;
for(int i = 0; i < n-1; i++){
pop(arr, &s, &e);
push(arr, &s, &e, arr[s]);
pop(arr, &s, &e);
}
printf("%d", arr[2*(n-1)]);
}