문제

요세푸스 문제 0 백준 11866번


리뷰

K번째 수를 세는 문제다. 큐를 이용해 풀 수 있다.

일단 꺼낸다 pop한다. 몇 번째인지 cnt를 확인한다. K번째면 답에 넣고, 아니면 다시 push 한다.


맞은 코드

#include <iostream>
#include <vector>
#include <queue>
using namespace std;

int N, K, n;
queue<int> q;
vector<int> v;

int main(void){

    scanf("%d %d", &N, &K);
      for(int i=1; i<=N; i++){
        q.push(i);          
    }

     int cnt = 0;

     while(!q.empty()){

         int num = q.front(); 
         q.pop(); // 일단 꺼낸다.
         cnt++;

         if(cnt == K){ // K번째 일 때 벡터에 넣는다 
              v.push_back(num);
             cnt = 0;
        }else{
            q.push(num); // 다시 넣는다. 
        }
    }

    // 출력
    cout << '<';
    for(int i = 0; i < v.size()-1; i++ ){
        printf("%d, ", v[i]);
    }
    printf("%d>", v[v.size()-1]);

    return 0;
} 

728x90

'알고리즘 > 백준' 카테고리의 다른 글

체스판 다시 칠하기 백준 1018번  (0) 2020.10.02
골드바흐 파티션 백준 17103번  (0) 2020.10.02
카드2 백준 2164번  (0) 2020.09.30
ACM 호텔 백준 10250번 c++  (0) 2020.09.28
이항계수1 백준 11050번 c++  (0) 2020.09.28

+ Recent posts