N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다.
이제 다음과 같은 동작을 카드가 한 장 남을 때까지 반복하게 된다. 우선, 제일 위에 있는 카드를 바닥에 버린다. 그 다음, 제일 위에 있는 카드를 제일 아래에 있는 카드 밑으로 옮긴다.
N이 주어졌을 때, 제일 마지막에 남게 되는 카드를 구하는 프로그램을 작성하시오.
자료 구조
큐
먼저 큐에 카드를 순서대로 넣은 뒤, 맨 앞의 카드를 빼내고, 그 다음 카드를 빼내면서 뒤로 다시 넣으면 된다.
이 행동을 큐의 크기가 1
이 될때까지 반복하면 된다.
#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <queue>
using namespace std;
int main()
{
int n, temp;
queue<int> q;
cin >> n;
for (int i = 1; i <= n; i++)
q.push(i);
while (q.size() > 1) {
q.pop();
temp = q.front();
q.pop();
q.push(temp);
}
cout << q.front();
return 0;
}