이 문제는 큐(queue)를 이용하면 쉽다는 사실만 발견하면 수월하게 코드를 작성할 수 있다.
큐를 이용하여 문제에 주어진 내용을 그대로 따라가 주면 된다.
먼저 큐에 숫자들을 저장한 이후 제일 앞(front)에 있는 숫자를 버리고(pop) 그 다음 front 숫자를 맨 뒤로 보내면 된다. 이를 n-1번 만큼 반복하게 된다면 문제에서 원하는 단 하나의 숫자만 남게 된다.
#include <iostream>
#include <queue>
using namespace std;
void init() {
ios_base::sync_with_stdio(false);
cin.tie(0);
}
int main() {
init();
int n;
cin >> n;
queue<int> q;
queue<int> ans;
// 초기 카드 모양으로 초기화해줌.
for (int i = 0; i < n; i++) {
q.push(i+1);
}
for (int i = 0; i < n - 1; i++) {
q.pop(); // 제일 위에 있는 카드를 제거
int temp = q.front(); // 그 다음 카드를 제일 아래로 내리기 위해 저장해둠
q.pop(); // 제거
q.push(temp); // 제일 뒤로 다시 넣음
}
for (int i = 0; i < q.size(); i++) {
cout << q.front() << " ";
q.pop();
}
}