Computer Science
[BOJ] 1158 요세푸스 문제
jhkang-dev
2021. 5. 25. 00:00
문제 링크 : https://www.acmicpc.net/problem/1158
1158번: 요세푸스 문제
첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000)
www.acmicpc.net
[해결 과정]
1. 원이라고 문제상에 나와있지만 사실상 일렬로 된 배열로 봐도 무방하다.
2. 자동으로 메모리 관리를 해주는 벡터 자료구조가 사용하기 용이하다고 생각.
나는 이것을 벡터라고 생각했는데 알고보니 큐를 이용해서 하면 된다.
내가 참고한 풀이
https://jaetsby.tistory.com/19
백준 요세푸스 문제 C++ (1158)
요즘 문제가 잘 풀리지 않는다ㅜ 이 문제 사실 조금만 고민해보면 쉽게 풀리는 문제였는데, 너무 어렵게 접근했던 것 같다. 처음 떠올린 풀이를 고집하면 이제 이런 문제로 두 시간을 소비하게
jaetsby.tistory.com
#include <iostream>
#include <algorithm>
#include <queue>
using namespace std;
int n, k, tmp;
queue<int> q;
int main(int argc, char* argv[]) {
ios_base :: sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> n >> k;
for(int i=1;i<=n;i++){
q.push(i);
}
cout << '<';
while(q.size() > 1){
for(int i=0;i<k-1;i++){
tmp = q.front();
q.push(tmp);
q.pop();
}
tmp = q.front();
cout << tmp << ", ";
q.pop();
}
tmp = q.front();
cout << tmp << ">\n";
return 0;
}