반응형
<문제 소개>
<소스 코드>
#include <iostream>
#include <queue>
using namespace std;
int main()
{
// 쓰레드 환경이 아닐때 버퍼를 분리하여 처리속도를 빠르게 해줌
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int N, K;
cin >> N >> K;
queue<int> circle;
// 순서대로 사람을 앉힘
for (int i = 1; i <= N; i++)
{
circle.push(i);
}
cout << "<";
while (circle.size() != 0)
{
for (int i = 1; i < K; i++)
{
// 맨 앞의 원소를 맨 뒤로 보냄
circle.push(circle.front());
circle.pop();
}
// K번째 원소를 output으로 보내고 해당 원소를 삭제
cout << circle.front();
circle.pop();
if (circle.size() != 0) cout << ", ";
}
cout << ">";
return 0;
}
<풀이과정>
1. 큐 circle을 선언
2. 1부터 N까지 반복하며 큐에 차례로 수들을 입력
3. 출력형식에 따라 "<"를 먼저 출력
4. circle의 크기가 0이 될때까지 반복을 진행
5. 1부터 K-1까지 circle의 맨 앞의 원소를 맨 뒤로 보내는 작업을 하여 반복이 끝나면 K번째 수가 맨 앞에 오도록 만듦
6. 맨 앞에 위치한 K번째 수를 front를 이용해 출력하고 해당 수는 pop을 이용해 큐에서 내보낸다.
7. 이 과정을 반복하며 마지막을 제외하고는 ", "(쉼표와 공백)을 같이 출력해준다.
8. 모든 반복이 끝나면 "<"를 출력하여 마친다.
<코멘트>
큐의 특징을 잘 살려서 풀수 있었던 문제였다!
<제출결과>