1부터 N번까지 카드가 들어있는데, 첫 번째 카드를 지우고 다음 카드를 뒤에 넣어준 뒤 또 첫 번재 카드를 지우고... 뭐 이런 규칙을 반복해서 마지막 남은 카드를 찾는 문제이다.
queue 헤더를 포함해서 풀었다. 먼저 1부터 n까지 숫자를 큐에 삽입한 후 삭제, 삽입, 삭제를 반복해서 크기가 1이 안 될 때까지 반복했다. 계속 무한 루프에 걸리길래 뭐가 문제인지 알아 봤더니 마지막에 pop를 한 번 더 써줘야 했다. 솔직히 이유는 모르겠지만, 흠... 뭔가 알 거 같기도 하면서? 모르겠네.
#include<iostream>
#include<queue>
using namespace std;
int main() {
int n;
queue<int> q;
int back;
cin >> n;
for (int i = 1; i <= n; i++) {
q.push(i);
}
while (q.size() > 1) {
q.pop();
q.push(q.front());
q.pop();
}
cout << q.front();
return 0;
}