코딩테스트 연습/Baekjoon
[Baekjoon] 1158번 : 요세푸스 문제 (c++)
수기
2022. 3. 31. 19:44
https://www.acmicpc.net/problem/1158
1158번: 요세푸스 문제
첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000)
www.acmicpc.net
n개 수열에서 k번째 선택된 수만 뽑아내는 것이니까 k번째 수가 아닌 수들은 모두 뒤로 push한 뒤 pop을 시켜주고, k번째 수는 바로 pop과함께 출력시켜준다.
코드
// 1158
#include <iostream>
#include <queue>
using namespace std;
int main(int argc, const char *argv[])
{
int n, k;
queue<int> q;
cin >> n >> k;
for (int i = 1; i <= n; i++)
{
q.push(i);
}
cout << "<";
while (!q.empty())
{
for (int i = 1; i < k; i++)
{
q.push(q.front());
q.pop();
}
cout << q.front();
if (q.size() != 1)
cout << ", ";
q.pop();
}
cout << ">";
return 0;
}