열심히 코딩 하숭!

[알고리즘][덱] 20301번 반전 요세푸스 | baekjoon 문제 풀이 본문

코딩테스트/알고리즘

[알고리즘][덱] 20301번 반전 요세푸스 | baekjoon 문제 풀이

채숭이 2023. 3. 28. 12:35

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

 

20301번: 반전 요세푸스

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

www.acmicpc.net

 

 

 

전에 풀었던 요세푸스 문제에 조건이 추가되었다.

 

 

풀이

#include <iostream>
#include <deque>
using namespace std;

int main() {
	ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
	
	int N, K, M;
	cin >> N >> K >> M;

	deque<int> dq;

	for (int i = 1; i <= N; i++) {
		dq.push_back(i);
	}
	
	int count = 0;
	bool switch_turn = false;

	for (int i = 0; i < N; i++) {
		if (count == M) {
			count = 0;
			switch_turn = !switch_turn;
		}
		count++;
		if (!switch_turn) {
			for (int j = 0; j < (K - 1); j++) {
				dq.push_back(dq.front());
				dq.pop_front();
			}
			cout << dq.front() << '\n';
			dq.pop_front();
		}
		else {
			for (int j = 0; j < (K - 1); j++) {
				dq.push_front(dq.back());
				dq.pop_back();
			}
			cout << dq.back() << '\n';
			dq.pop_back();
		}
	}
}

 

오예