Little Jay

[C++] 백준 20301번 - 반전 요세푸스 본문

알고리즘/BOJ

[C++] 백준 20301번 - 반전 요세푸스

Jay, Lee 2022. 8. 5. 14:47

요세푸스 문제가 단순히 Queue만 사용하는 문제라면 이 문제는 Deque를 이용하서 제거된 사람이 M과 일치하면 방향을 반대로 뒤집어서 요세푸스를 수행해야 하기 때문에 Deque 자료구조를 사용해야한다. 요세푸스 문제를 풀었다면 쉽게 해걀할 수 있었던 문제.

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

int main() {

	cin.tie(0);
	cout.tie(0);
	ios::sync_with_stdio(false);

	int n, k, m;
	deque<int> dq;
	int counter = 0;
	cin >> n >> k >> m;

	bool flag = true;
	for (int i = 1; i <= n; i++) {
		dq.push_back(i);
	}
	

	while (!dq.empty()) {
		if (flag) {
			for (int i = 0; i < k - 1; i++) {
				dq.push_back(dq.front());
				dq.pop_front();
			}

			cout << dq.front() << endl;
			dq.pop_front();
		}
		else {
			for (int i = 0; i < k - 1; i++) {
				dq.push_front(dq.back());
				dq.pop_back();
			}

			cout << dq.back() << endl;
			dq.pop_back();
		}
		counter++;
		if (counter == m) {
			flag = !flag;
			counter = 0;
		}
	}

	return 0;
}
Comments