콘솔창 & 윈도우창/코딩 테스트

[백준 실버4] 2164 카드2

뽀또치즈맛 2024. 10. 17. 21:22

 

밑에 큐라고 써있는 만큼 선입선출(FIFO)의 구조를 가질 수 있는 구현 방법이다.

차례대로 넣고 빼는 순서는 가장 먼저 넣은 것을 빼고 (= 큐에 있는 것을 뺀다)

그 바로 뒤에 있던 카드를 뒤에 넣는다(= 큐에 새로 추가한다).

다시 그리고 세 번째에 있던 카드를 뺀다.( = 큐에 있는 것을 뺀다)

라는 과정의 반복이다.

 

카드가 단 1장 남을 때 까지면 Queue의 사이즈가 1일때 까지가 반복문의 조건된다.

#include <string>
#include <vector>
#include <iostream>
#include <map>
#include <algorithm>
#include <stack>
#include <queue>
#include <cmath>

using namespace std;


int main(void)
{
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    
    queue<int> que;
    int N;
    cin >> N;

    for (int i = 1; i <= N; i++) {
        que.push(i);
    }
    while (que.size() > 1)
    {
        que.pop();
        que.push(que.front());
        que.pop();
    }
    cout << que.front();


    return 0;
}