[ ALGORITHM ]/[ 백 준 ]
[BAEKJOON] 11866번 요세푸스 문제 0
HiStar__
2020. 7. 27. 13:39
문 제
소 스 코 드
#include <iostream>
#include <queue>
#include <vector>
int main() {
std::queue<int> que;
std::vector<int> seq;
int N, K;
std::cin >> N >> K;
for (int i = 0; i < N; ++i) que.push(i + 1);
seq.reserve(N);
int n{ 1 };
while (!que.empty()) {
if (K - 1 < n) {
seq.emplace_back(static_cast<int>(que.front()));
que.pop();
n = 1;
}
else {
que.push(que.front());
que.pop();
++n;
}
}
std::cout << "<";
for (int i = 0; i < seq.size(); ++i) {
if (i == (seq.size() - 1)) {
std::cout << seq[i] << ">";
}
else {
std::cout << seq[i] << ", ";
}
}
return 0;
}
풀 이
-
Queue를 통한 간단한 구현
-
K - 1 번째 반복되는 값을 vector에 저장하고, 그 외의 값을 다시 Queue의 뒤의 값으로 추가.
큐가 Empty()가 될 때 까지 반복해야 한다.
출 력 값
문 제 출 처
문제 링크 : [ BAEKJOON ] : https://www.acmicpc.net/problem/11866
11866번: 요세푸스 문제 0
첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 1,000)
www.acmicpc.net