알고리즘/BOJ

[BOJ] 11866. 요세푸스 문제 0

hyerann 2020. 3. 25. 00:14

vector에 1~N까지의 수를 넣어두고, 해당 순서의 사람을 출력하고 지우는 것을 반복하였습니다.

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

 

11866번: 요세푸스 문제 0

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

www.acmicpc.net

#include <iostream>
#include <vector>

using namespace std;
vector<int> numbers;

int main() {
    cin.tie(0); cout.tie(0);
    ios::sync_with_stdio(0);
    
    int N, K;
    cin >> N >> K;
    
    for(int i=1; i<=N; i++) {
        numbers.emplace_back(i);
    }
    
    int idx = 0;
    
    cout << '<';
    
    while(1) {
        if(numbers.size() == 1) {
            break;
        }
        idx += K-1;
        while(idx >= numbers.size()) {
            idx -= numbers.size();
        }
        cout << numbers[idx] << ", ";
        numbers.erase(numbers.begin()+idx);
    }
    cout << numbers[0] << '>';
    
    return 0;
}