Notice
Recent Posts
Recent Comments
«   2024/12   »
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 28
29 30 31
Archives
Today
Total
관리 메뉴

블로그 언저리인 무언가

[백준/BOJ] 20301 반전 요세푸스 본문

Programming/BOJ

[백준/BOJ] 20301 반전 요세푸스

he1fire 2022. 9. 20. 19:25
728x90

문제 : 20301 반전 요세푸스

 

20301번: 반전 요세푸스

첫째 줄에 정수 $N$, $K$, $M$이 주어진다. ($1 \leq N \leq 5\ 000$, $1 \leq K, M \leq N$)

www.acmicpc.net

덱 자료구조를 이용해서 구현하면

실제로 사람들의 위치를 이동시켜 쉽게 구현할 수 있다.


Code

#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll N, M, K, chk=1, cnt;
deque<ll> dq;
int main(){
    cin >> N >> K >> M;
    for (int i=1;i<=N;i++)
        dq.push_back(i);
    while (!dq.empty()){
        if (chk){ // 정방향일때
            for (int i=0;i<K;i++){
                ll x=dq.front();
                dq.pop_front();
                dq.push_back(x);
            }
            cout << dq.back() << "\n";
            dq.pop_back();
        }
        else{ // 역방향일때
            for (int i=0;i<K;i++){
                ll x=dq.back();
                dq.pop_back();
                dq.push_front(x);
            }
            cout << dq.front() << "\n";
            dq.pop_front();
        }
        cnt++;
        if (cnt==M){ // M명을 제거할때 마다 순회방향 변경
            cnt=0;
            chk=(chk+1)%2;
        }
    }
    return 0;
}
728x90
Comments