백준 11866 요세푸스 문제 0 / C++

이유참치·2025년 12월 15일

백준

목록 보기
151/249

문제 : 11866

풀이 point

queue를 사용하여 해결할 수 있다.

풀이 방법

K번째마다 수를 지워나가므로 K번째 순서가 다가오기 전까지는 맨 앞에 요소를 계속 뒤로 보낸다. K번째 순서가 됐을때 맨 앞 요소를 제거한후 다음 K번째 순서가 될때까지 맨 앞에 요소를 뒤로 보낸다.

코드

//백준 11866, 요세푸스 문제 0

#include <iostream>
#include <deque>

std::deque<int> d;

int main (){

    int N, K;
    std::cin >> N >> K;
    for(int i{1}; i<=N; ++i){
        d.push_back(i);
    }
    int turn{1};
    std::cout << "<";
    while(d.size() != 1){
        if(turn == K){
            std::cout << d.front() << ',' << ' ';
            d.pop_front();
            turn = 1;
        }
        else{
            int tmp = d.front();
            d.pop_front();
            d.push_back(tmp);
            ++turn;
        }
    }

    std::cout << d.front() << ">";

    return 0;
}
profile
임아리 - 대학생

0개의 댓글