최대 1 분 소요

[백준 1158] 요세푸스 문제

문제 링크

#include "header.h"
using namespace std;
int N, K;
queue <int> q;
vector<int> answer;

void print() {
  cout << '<';
  for(int i=0; i<answer.size()-1; i++){
    cout << answer[i] << ", ";
  }
  cout << answer[answer.size()-1] << '>';
}
int main() {
  cin >> N >> K;

  for(int i=1; i<=N; i++) q.push(i);

  int cnt = 0;
  while (!q.empty()){
    int top = q.front();
    q.pop();
    cnt++;
    if(cnt == K) {
      answer.push_back(top);
      cnt = 0;
    }else q.push(top);
  }

  print();

  return 0;
}
  • 다시 알고리즘 시작.. 몸풀기로 쉬운거 하나 풀었다.
  • 큐로 원형을 만들면서 구현 하면 되는 문제.
  • cnt 변수를 두어 하나씩 더해가면서, K 번째가 될 때 answer에 넣어준다.
  • 큐가 빌 때 까지 반복한다.

카테고리:

업데이트: