코딩테스트 연습/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;
}