Algorithm/백준과 프로그래머스
[C++] 1158. 요세푸스
young_3060
2023. 7. 15. 20:00
728x90
문제풀이
처음에는 연결리스트 사용해서 circular queue를 사용해야겠다고 생각했다.
하지만 복잡하기 때문에 그냥 단순하게 필요한 순번의 번호가 나올때까지 뽑아서 다시 Queue 뒤에 저장하는 방식으로 야매 circular queue를 구현했다.
- Queue에 N만큼의 정수를 저장해준다.
- K-1번째까지의 원소를 pop해서 Queue 뒤에 push해준다.
- K번째의 원소를 pop해준다.
- Queue에 원소가 1개 남을때까지 반복해준다. (출력 형식때문에)
- 마지막원소를 출력해주고 마무리한다.
코드
#include <iostream>
#include <queue>
using namespace std;
int main(void)
{
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int N, k; cin >> N >> k;
queue<int> arr, result;
for(int i=1; i<=N; i++) arr.push(i);
cout << "<";
while(arr.size() > 1) {
for (int i=0; i<k; i++)
{
int temp = arr.front();
arr.pop();
if(i==k-1) cout << temp << ", ";
else arr.push(temp);
}
}
cout << arr.front() << ">\n";
return 0;
}
728x90