알고리즘 문제 해결/BOJ

[자료구조, 큐] BOJ 1158 요세푸스 문제

jmkimmessi 2020. 11. 21. 13:04
반응형

www.acmicpc.net/problem/1158

 

1158번: 요세푸스 문제

첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000)

www.acmicpc.net

문제 해결 알고리즘

1. 큐(q)에 1부터 N까지의 숫자들을 순서대로 push해준다.

 

2. 큐(q)안에 숫자들이 모두 없어질 때까지 

    K번 옆으로 갈 때 과정에서 지나치는 숫자들은 큐의 맨 앞에서 맨 뒤로 보내고, K번 가서 도착한 그 숫자는 출력하고 큐(q)에서 pop한다.

   여기서 큐의 사이즈가 1이 아니면 뒤에 쉼표(,)를 출력한 후 pop한다.

 

소스 코드

#include <bits/stdc++.h>
using namespace std;

int main(){
  int N, K; cin >> N >> K;
  queue<int> q;
  cout << '<';
  for(int i=1;i<=N;i++){
    q.push(i);
  }
  while(!q.empty()){
    for(int i=0;i<K-1;i++){
      q.push(q.front());
      q.pop();
    }
    if(q.size() == 1){
      cout << q.front();
      q.pop();
    }
    else {
      cout << q.front() << ", ";
      q.pop();
    }
  }
  cout << '>';
}
반응형