문제링크 : https://www.acmicpc.net/problem/1158
1158번: 요세푸스 문제
첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000)
www.acmicpc.net
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int MAX = 987654321;
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
int N, K;
cin >> N >> K;
queue<int>q;
for(int i=1; i<=N; i++)
{
q.push(i); //큐에 값 넣기
}
cout << "<";
while(!q.empty())
{
for(int i=1; i<K; i++) //K번 앞에값을 뒤로
{
q.push(q.front());
q.pop();
}
if(q.size()==1) cout << q.front(); //마지막 1개는 ", " 출력 필요없음
else cout << q.front() << ", "; //K번째 값 출력하고 삭제
q.pop();
}
cout << ">";
return 0;
}
큐를 활용한 문제다.
K번째 전까지는 값을 맨 뒤에 다시 넣고, K번째에는 출력하고 해당 값을 삭제하는 것을 반복한다.
여기서 마지막 값은 뒤에 ", "을 출력해줄 필요가 없기에 이를 주의해야 한다.
'백준 > 실버' 카테고리의 다른 글
[백준 14569번] 시간표 짜기 (C++) (0) | 2023.08.01 |
---|---|
[백준 25206번] 너의 평점은 (C++) (0) | 2023.08.01 |
[백준 28138번] 재밌는 나머지 연산 (C++) (0) | 2023.07.30 |
[백준 16173번] 점프왕 쩰리 (Small) (C++) (0) | 2023.07.28 |
[백준 28250번] 이브, 프시케 그리고 푸른 MEX의 아내 (C++) (0) | 2023.07.25 |