본문 바로가기

백준 문제 풀이

백준 11866번 요세푸스 문제 0 (C++)

728x90

처음 봤을 땐 벡터를 사용할까 생각했다. 그러나 분류를 보니 큐가 있었다.

정말 이걸 왜 생각 못했을까, 이걸 코테에서 만났다면 멍청하게 삽질하다가 시간버렸을 것 같다.

아이디어는 간단하다.

 

1. 큐에서 front 부터 꺼내면서 K번째가 아니면 다시 큐에 쌓는다.

2. K번째이면 큐에 쌓지 않는다.

3. 큐가 빌 때 까지 반복한다.

 

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

int main() {
	queue<int> Q;
	int N, K;

	cin >> N >> K;

	for (int i = 1; i <= N; i++)
		Q.push(i);
	int cnt = 0;
	cout << "<";
	while (!Q.empty()) {
		
		if (cnt < K - 1) {
			Q.push(Q.front());
			Q.pop();
			cnt++;
		}
		else {
			if (Q.size() != 1)
				cout << Q.front() << ", ";
			else
				cout << Q.front();

			Q.pop();
			cnt = 0;
		}
	}
	cout << ">";
}

출력형식이 짜증났던 문제