자료구조

[백준] 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)]);
    
}