Baekjoon Review

[Silver 5] 11866번 요세푸스 문제 0

hanseongbugi 2023. 10. 13. 21:22

https://www.acmicpc.net/problem/11866

 

11866번: 요세푸스 문제 0

첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 1,000)

www.acmicpc.net

 

이 문제는 queue를 이용하여 해결할 수 있었다.

queue에 N까지의 숫자를 1부터 삽입하여 queue의 front는 1 back은 N으로 한다.

이후 queue가 비어있지 않을 때 까지 반복을 수행한다. 이때 queue에서 K 만큼 앞에 있는 것을 뒤에 빼고 넣는 과정을 반복한다.

반복을 빠져 나오면 queue의 front에 있는 숫자를 출력하면 K 번째 숫자가 된다.

 

#include<iostream>
#include<queue>
using namespace std;

int main(){
    int N, K;
    cin>>N>>K;
    queue<int> q;
    
    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<<">";
}