코딩테스트_백준풀이
요세푸스 문제 #1158 c++ 풀이
wanna_dev
2023. 11. 10. 18:24
https://www.acmicpc.net/problem/1158
1158번: 요세푸스 문제
첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000)
www.acmicpc.net
보자마자 queue를 이용해야겠다고 생각이 들었던 문제
넣고 2번 빼고 뺄때마다 다시 넣고 뽑고 출력하고를 반복하면 풀린다.
#include<iostream>
#include<queue>
#include<vector>
using namespace std;
int main() {
int n, k;
cin >> n >> k;
queue<int> q;
for (int i = 1; i <= n; i++) {
q.push(i);
}
vector<int> v;
while (!q.empty()) {
int curr;
for (int i = 1; i < k; i++) {
curr = q.front();
q.pop();
q.push(curr);
}
curr = q.front();
q.pop();
v.push_back(curr);
}
cout << "<";
for (int i = 0; i < v.size(); i++)
{
if (i == v.size() - 1)
cout << v[i];
else
cout << v[i] << ", ";
}
cout << ">";
return 0;
}