1번부터 N번까지 N명의 사람이 원을 이루면서 앉아있고, 양의 정수 K(≤ N)가 주어진다
이제 순서대로 K번째 사람을 제거한다
한 사람이 제거되면 남은 사람들로 이루어진 원을 따라 이 과정을 계속해 나간다
N과 K가 주어지면 (N, K)-요세푸스 순열을 구하는 문제
이런식으로 진행된다
queue는 원형이 아니기 때문에 front를 계속 back으로 보내주면서 계산해야한다
1. front를 back으로 k-1번 보내준다
2. k번째 값을 출력 후 pop 한다
이 과정을 queue.empty() = true 일 때 까지 반복하면 됨
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
#include <iostream>
#include <queue>
using namespace std;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
int n, k;
queue<int> q;
cin >> n >> k;
for (int i = 1; i <= n; i++)
q.push(i);
cout << "<";
int cnt = 0;
while (!q.empty()) {
if (++cnt == k) {
cout << q.front();
q.pop();
cnt = 0;
if (q.empty())
cout << ">";
else
cout << ", ";
}
else {
q.push(q.front());
q.pop();
}
}
}
|
cs |
'Algorithm > BOJ' 카테고리의 다른 글
[백준 알고리즘/C++/DP] 11052 카드 구매하기 (0) | 2021.05.13 |
---|---|
[백준 알고리즘/C++/DP] 11722 가장 긴 감소하는 부분 수열 (0) | 2021.05.13 |
[백준 알고리즘/C++/큐] 2164 카드2 (0) | 2021.04.25 |
[백준 알고리즘/C++/큐] 18258 큐2 (0) | 2021.04.25 |
[백준 알고리즘/C++/스택] 17298 오큰수 (0) | 2021.04.24 |