본문 바로가기
문제 풀이/백준(BOJ)

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

by 희조당 2021. 7. 24.
728x90

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

 

11866번: 요세푸스 문제 0

첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 1,000)

www.acmicpc.net


 문제 풀이

요세푸스 문제에서는 k번째에 사람을 제거한다.

구현한 큐에서 k-1번 동안 front를 맨 뒤로 옮기고, k번째에 front 값을 출력한다.

큐가 비어있지 않다면 ', '를 출력해서 요구하는 출력 형식에 맞춘다!

 느낀 점

그렇게 어려운 문제는 아니었지만 코드를 깔끔하게 구현하기 힘들었다. 깔끔하게 구현하기 위해서 시간을 조금 소모한 것 같다.

 코드

#include <iostream>
#include <queue>

using namespace std;

int n, k;
queue<int> q;

void func(int n, int k) {
	for (int i = 1; i <= n;i++) {
		q.push(i);
	}
	cout << "<";
	while (!q.empty()) {
		for (int i = 0; i < k-1;i++) {
			q.push(q.front());
			q.pop();
		}
		cout << q.front();
		q.pop();
		if (!q.empty()) {
			cout << ", ";
		}
	}
	cout << ">" << "\n";
}

int main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0);

	cin >> n >> k;
	func(n, k);
}

'문제 풀이 > 백준(BOJ)' 카테고리의 다른 글

[C++] 백준 10866번 : 덱  (0) 2021.07.24
[C++] 백준 1966번 : 프린터 큐  (0) 2021.07.24
[C++] 백준 2164번 : 카드2  (0) 2021.07.24
[C++] 백준 18258번 : 큐 2  (0) 2021.07.23
[C++] 백준 17298번 : 오큰수  (0) 2021.07.23

댓글