본문 바로가기

Algorithm/Implementation

(C++) - 백준(BOJ) 11866번 : 요세푸스 문제 0

반응형

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

 

11866번: 요세푸스 문제 0

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

www.acmicpc.net

자료구조 queue를 이용해 구현하여 AC를 받았습니다.

 

풀이방법 : 

 1. 사람을 모두 제거할 때까지 loop를 돕니다.

 2-1. 일정 순번(k)째가 되면 그때 queue를 pop한 후 출력합니다.

 2-2. 일정 순번째가 아니면 queue의 가장 앞 원소를 가장 뒤쪽으로 옮겨줍니다.

 3. < > 과 ,를 잘 출력해주도록 조절해줍니다.

 

Code :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
#include <queue>
using namespace std;
int main(){
    queue <int> people;
    int n, k, removedPeopleNum = 0;
    int current = 1;
    cin >> n >> k;
    for(int i = 1; i<=n; i++) people.push(i);
    cout << "<";
    while(removedPeopleNum!=n){
        while(1){
            if(current++ % k == 0){
                cout << people.front();
                people.pop();
                removedPeopleNum++;
                break;
            }
            else{
                people.push(people.front());
                people.pop();
            }
        }
        if(removedPeopleNum != n) cout << ", ";
    }
    cout << ">";
}