백준/기타

11866번: 요세푸스 문제 0 [C++]

Koalitsiya 2023. 4. 6. 16:42

문제

 

 

풀이

 특정 집단에서 k번째 인원을 아무도 남지 않을 때까지 반복해서 제거하고 이 제거되는 순서대로 해당 인원의 번호를 출력하면 된다. 이 문제는 큐를 통해 쉽게 해결할 수 있다.

#include <iostream>
#include <queue>

using namespace std;

int main() {
	int n, k;
	queue<int> q;

	cin >> n >> k;

	for (int i = 1; i <= n; i++)
		q.push(i);

	cout << "<";

	while (q.size() > 0) {
		for (int i = 0; i < k - 1; i++) {
			q.push(q.front());
			q.pop();
		}

		if (q.size() > 1) cout << q.front() << ", ";
		else cout << q.front() << ">";
		q.pop();
	}

	return 0;
}