알고리즘/백준 BAEK JOON

11866.요세푸스 문제 0

IMyoungho 2020. 4. 6. 23:57

이번 문제는 백준의 11866 요세푸스 문제 0이다.

11866번: 요세푸스 문제 0

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

www.acmicpc.net

문제를 이해하는 건 금방했는데 원형으로 배열을 만들어야하나 하는 생각을 했고

굳이 그럴 필요가 없다고 생각해서 포인터로 예외처리를 하려고 하였으나

너무나 비효율적이었고 결국 queue를 사용해서 풀었다. 조금만 쉽게 생각하면 됬는데.. 허허..

 

< Code 설명 >

#include <iostream>
#include <queue>


using namespace std;

int main()
{
    int n, k;
    cin >> n >> k;         // 길이와 K번째 순서 입력
    queue<int>q;           // queue
    for(int i=1; i<=n; i++)// queue에 다넣는다.
        q.push(i);

    int temp;                   // q의 제일 첫번째가 저장될 값
    cout << "<";
    while(!q.empty()){          // queue가 빌 때까지  
        for(int i=1; i<k; i++){ // k-1번째 만큼 움직일 것이다.
            temp = q.front();   // 제일 앞의 값을 저장하고
            q.pop();            // 뺀다음
            q.push(temp);       // 뒤로 보내준다.
        }                       // 이렇게 k-1 만큼 반복하면 제일 앞에 k번째 숫자가 된다.
        cout << q.front();      // 그 값을 출력하고
        q.pop();                // 뺀다. -> 이를 반복하면 된다.
        if(!q.empty())          // queue가 다 비지 않았으면 ','를 찍어준다.
            cout << ","  << " ";
    }
    cout << ">" << "\n";
    return 0;
}

생각보다 쉬운 문제였다!

 

 

반응형