본문 바로가기

알고리즘 Algorithm/백준 (BaekJoon)

백준 2164 : 카드2 [C++]

문제


문제에 대한 링크는 여기를 클릭해주세요.

문제 설명


N을 입력한 후 1부터 N까지의 숫자가 써있는 카드를 가지고 맨 위 카드를 버린뒤 그 다음 맨위의 카드는 맨 아래로 이동하는 행위를 반복합니다. 이후 마지막에 남은 카드를 출력하는 문제입니다.

풀이


C++ STL에 있는 queue를 사용하였습니다. for문을 사용하여 queue의 size가 1이 될때까지 반복하였습니다. queue를 pop함으로써 카드를 버리고 front의 있는 값을 push하고 pop을 함으로써 맨 뒤로 이동시켰습니다.

소스 코드


#include <iostream>
#include <queue>

using namespace std;

int main()
{
    queue<int> q;
    int N;

    scanf("%d", &N);
    for (int i = 1; i <= N; i++)
        q.push(i);

    for (int i = 0; q.size() != 1; i++)
    {
        if(i % 2 == 0)
            q.pop();
        else
        {
            q.push(q.front());
            q.pop();
        }
    }

    printf("%d\n", q.front());

    return 0;
}

주의 사항


반복문을 사용할 시 i의 값이 N이 될 때까지가 아니라 queue의 사이즈가 1이 될 때까지임을 유의하여 코드를 작성해야 합니다.