Notice
Recent Posts
Recent Comments
«   2026/01   »
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

'Programming > BOJ' 카테고리의 다른 글

[백준/BOJ] 8980 택배  (2) 2025.08.08
[백준/BOJ] 16236 아기 상어  (1) 2022.09.20
[백준/BOJ] 20365 블로그2  (0) 2022.09.20
[백준/BOJ] 1025 제곱수 찾기  (0) 2022.09.19
[백준/BOJ] 17085 십자가 2개 놓기  (0) 2022.09.16
Comments