백준 algorithm
백준 11866 요세푸스 문제 0 C++
cosmohoo
2022. 7. 17. 23:43
반응형
예제 입력 1 복사
7 3
예제 출력 1 복사
<3, 6, 2, 7, 5, 1, 4>
=> 자료구조 queue 를 안다면 구현할 수 있는 문제입니다.
=> 삭제하고픈 원소를 찾을때까지 이전에 있는 원소들을 큐의 뒤쪽에 삽입합니다.
=> 삭제하고픈 원소를 찾을 경우, 해당원소를 PRINT하고 POP을 해줍니다.
=> 요세푸스 QUEUE에 원소가 없을때까지 위의 작업을 반복합니다.
=> 프린트문 시작 '<'과 프린트문 종료'>' 를 적절한 곳에 넣어줍니다.
=> 문제풀이는 아래의 그림과 같습니다.

#include <string>
#include <algorithm>
#include <set>
#include <map>
#include <unordered_map>
#include <unordered_set>
#include <iostream>
#include <queue>
#include <utility>
#include <stdio.h>
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int N,K;
cin >> N >> K;
queue<int> jose; //요세푸스 큐
//큐에 원소 삽입
for(int i=1; i<= N; i++)
{
jose.push(i);
}
//프린트문 시작
cout << "<";
while(1)
{
//k번째 원소가 jose큐 가장 앞에 오도록함
//나갈원소 앞에 있던 원소들은 jose큐 뒤에 삽입
for(int i=0; i<K-1; i++)
{
int tmp = jose.front();
jose.push(tmp);
jose.pop();
}
cout << jose.front();
jose.pop();
//jose 큐가 꽉 찼을 경우, while문 탈출
if(jose.empty())
{
break;
}
//jose 큐가 비어있지 않을경우, ','을 찍어줌
else
{
cout <<", ";
}
}
//프린트문 종료
cout<<">";
}
2년전에 풀던 풀이방법과 다르게 풀이해보았습니다.
(2년전 풀이법 : LIST를 사용하여 실제 원소를 삭제하여 구현)
반응형