자기개발👨‍💻/코딩 알고리즘

[C++] 백준 1158 요세푸스 문제 //<queue>

천숭이 2022. 3. 18. 01:27

https://www.acmicpc.net/problem/1158

 

1158번: 요세푸스 문제

첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000)

www.acmicpc.net

#include <iostream>
#include <queue>
using namespace std;

int main(void){
	queue<int> q;
	int n, k, cnt=0;
	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++){
			q.push(q.front());
			q.pop();
		}
		
		cout<<q.front()<<", ";
		q.pop();
	}
	cout<<q.front();
	cout<<">";
}

 

- rotate 함수로 구현하려고 했으나 직접 front원소를 push하는 방법을 적용했다

- (k-1)만큼 앞 원소를 뒤로 보내주면 맨 앞원소가 k번째 원소가 되므로 출력한다.

-  이 작업을 queue 내부원소가 하나만 남을때까지 진행하고, 마지막 원소는 따로 출력