Machineboy空

11866: 요세푸스 문제 0 - queue 본문

Computer/Coding Test

11866: 요세푸스 문제 0 - queue

안녕도라 2024. 6. 7. 15:36

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

 

문제요약

원소 개수 n, 제거해야하는 사람 k 요세푸스 순열을 출력하라!

 

난이도

Silver 5


풀이 포인트

  • 그리디
    • 가장 첫번째 회의는 진행한다고 가정하고 그 다음에 열 수 있는 회의부터 고려

REVIEW

 

진짜 바보처럼 k를 3일 때만 가정하여 풀이를 구현했다가 틀렸다. 

queue를 활용하여 연속하는 순열만들기!

쉽게 풀리니 문제 풀이가 재밌다 ㅎ

 

 


CODE

#include <bits/stdc++.h>
using namespace std;

int n, k;
queue<int> q;
vector<int> v;

int main(){
    cin >> n >> k;

 
    for(int i = 1; i <= n; i++){
        q.push(i);
    }

    while(!q.empty()){

        for(int i = 0; i < k-1; i++){
            int first = q.front();
            q.pop();
            q.push(first);
        }
        
        int toRemove = q.front();
        q.pop();
        v.push_back(toRemove);
    }


    cout << "<";
    for(int i = 0; i < v.size(); i++){
        if (i != 0) cout << ", ";
        cout << v[i];
    }
    cout << ">";

}