반응형
#include <iostream> #include <queue> using namespace std; //조세푸스 문제를 해결하는 함수 void josephus(int N, int K) { queue<int> survivors; //생존자 큐 for (int i = 1;i <= N;i++) //각 병사들에게 번호 할당 { survivors.push(i); //큐에 enqueue } survivors.pop();//첫번째 병사 자살 int nextperson; //다음에 자살한 병사 while (survivors.size() > 2) //마지막 두명이 남을때까지 반복 { //k번째 병사를 고르는 반복문 for (int i = 0;i < K-1;i++) { nextperson = survivors.front();//다음 병사를 선택 //자살할 병사가 아니므로 디큐후 다시 인큐 survivors.pop(); survivors.push(nextperson); } //큐의 맨앞에 있는 병사가 k번째 병사이므로 자살(디큐) survivors.pop(); } //while문이 끝나면 큐에는 단 두명의 병사만 남는다 //큐가 오름차순으로 유지되지 않으므로 남은 병사들의 번호를 오름차순으로 출력 if(survivors.front()>survivors.back()) cout << survivors.back() << " " << survivors.front() << endl; else cout << survivors.front() << " " << survivors.back() << endl; } int main() { int c, N, K; cin >> c; for (int i = 0;i < c;i++) { cin >> N >> K; josephus(N, K); } return 0; }
실행결과 : 빨간상자의 숫자가 출력결과
반응형