문제
https://www.acmicpc.net/problem/11866
11866번: 요세푸스 문제 0
첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 1,000)
www.acmicpc.net
소스코드
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
vector<int> ans;
queue<int> qu;
int main() {
ios_base::sync_with_stdio(false), cin.tie(NULL);
int n, k;
cin >> n >> k;
for (int i = 1; i <= n; i++) {
qu.push(i);
}
cout << "<";
while (!qu.empty()) {
for (int i = 1; i < k; i++) {
qu.push(qu.front());
qu.pop();
}
ans.push_back(qu.front());
qu.pop();
}
for (int i = 0; i < ans.size(); i++) {
if (i == ans.size() - 1) {
cout << ans[i] << ">";
}
else {
cout << ans[i] << ", ";
}
}
}
해설
요세푸스 문제들은 원을 이루며 사람을 없애거나 하는 그런 종류의 문제입니다.
즉 큐를 이용해서 해결할 수 있는데요
큐는 First in First out 구조를 가진 FIFO 먼저들어온 것이 먼저 나간다 라는 의미로써 사용됩니다.
즉 K번째가 되면 큐에서 삭제하고 출력해주는 것을 구하는 것입니다.
소스코드를 보면 쉽게 이해가실 겁니다.
'Algorithm > 자료구조' 카테고리의 다른 글
[백준] 알고리즘 C++ 1764번 - 듣보잡문제 (0) | 2021.11.19 |
---|---|
[백준] 알고리즘 C++ 10989번 - 수 정렬하기3문제 (0) | 2021.11.10 |
[백준] 알고리즘 C++ 2164번 - 카드2문제 (0) | 2021.10.11 |
[백준] 알고리즘 C++ 1874번 - 스택 수열문제 (0) | 2021.10.10 |
[백준] 알고리즘 C++ 1654번 - 랜선 자르기문제 (0) | 2021.10.10 |