개발하는 kim-hasa

[c++][BOJ] 요세푸스 문제 본문

Algorithm/BOJ

[c++][BOJ] 요세푸스 문제

kim-hasa 2021. 9. 6. 12:09

https://www.acmicpc.net/problem/11866

 

11866번: 요세푸스 문제 0

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

www.acmicpc.net

사람들이 원으로 돌아 앉은 후 순서대로 빠져나가는 순서를 구하는 문제입니다.

 

가장 먼저 queue를 구성합니다. 그리고 순서에 따라서 한명씩 앞에서 빼서 뒤로 보냅니다.

 

만약 요세푸스 수에 맞았다면, 큐 뒤에 넣지 않고 바로 출력합니다.

 

1명 남을때까지 반복 후, 마지막 인원을 출력합니다.

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

int main(){
    int n;
    cin >> n;        // 숫자를 받을 갯수
    int k;            // 반복할 숫자
    
    queue<int> yose;    // queue
    
    for(int i=0; i<n; i++)
    {
        yose.push(i+1);        // queue에 집어넣음
    }
    
    cin >> k;
    
    int index = 1;
    
    cout << "<";
    
    while(yose.size() > 1)
    {
        if(index == k)
        {
            cout << yose.front() << ", ";
            yose.pop();
            index = 1;
        }
        else
        {
            int s = yose.front();
            yose.push(s);
            yose.pop();
            index++;
        }
    }
    cout << yose.front() << ">";
}

'Algorithm > BOJ' 카테고리의 다른 글

[c++][BOJ] Hasing  (0) 2021.09.10
[c++][BOJ] 프린터 큐  (0) 2021.09.09
[c++][BOJ] 스택 수열  (0) 2021.09.08
[c++][BOJ] 수 찾기  (0) 2021.09.07
[c++][BOJ] 균형잡힌 세상  (0) 2021.09.06