알고리즘/백준 BAEK JOON
11866.요세푸스 문제 0
IMyoungho
2020. 4. 6. 23:57
이번 문제는 백준의 11866 요세푸스 문제 0이다.
11866번: 요세푸스 문제 0
첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 1,000)
www.acmicpc.net
문제를 이해하는 건 금방했는데 원형으로 배열을 만들어야하나 하는 생각을 했고
굳이 그럴 필요가 없다고 생각해서 포인터로 예외처리를 하려고 하였으나
너무나 비효율적이었고 결국 queue를 사용해서 풀었다. 조금만 쉽게 생각하면 됬는데.. 허허..
< Code 설명 >
#include <iostream>
#include <queue>
using namespace std;
int main()
{
int n, k;
cin >> n >> k; // 길이와 K번째 순서 입력
queue<int>q; // queue
for(int i=1; i<=n; i++)// queue에 다넣는다.
q.push(i);
int temp; // q의 제일 첫번째가 저장될 값
cout << "<";
while(!q.empty()){ // queue가 빌 때까지
for(int i=1; i<k; i++){ // k-1번째 만큼 움직일 것이다.
temp = q.front(); // 제일 앞의 값을 저장하고
q.pop(); // 뺀다음
q.push(temp); // 뒤로 보내준다.
} // 이렇게 k-1 만큼 반복하면 제일 앞에 k번째 숫자가 된다.
cout << q.front(); // 그 값을 출력하고
q.pop(); // 뺀다. -> 이를 반복하면 된다.
if(!q.empty()) // queue가 다 비지 않았으면 ','를 찍어준다.
cout << "," << " ";
}
cout << ">" << "\n";
return 0;
}생각보다 쉬운 문제였다!
반응형