위에서 가져오고 밑에서 삽입한다는 건 선입선출을 의미하므로 큐를 사용하면 된다.
#include <iostream>
#include <queue>
using namespace std;
int main()
{
int N;
queue<int> q;
cin >> N;
for (int i = 1; i <= N; ++i)
{
q.push(i);
}
while (q.size() != 1)
{
q.pop();
int back = q.front();
q.pop();
q.push(back);
}
cout << q.front();
}
카드를 버린다는 건 pop을 의미하고 위에 카드를 밑으로 옮기는 건 다시 push 하는 것을 의미한다.
카드의 개수가 1개가 될 때까지 반복문을 돌려준다.