[백준 1158번-C++] 요세푸스 문제
알고리즘 공부/BOJ백준 풀이

[백준 1158번-C++] 요세푸스 문제

http://acmicpc.net/problem/1158

{코드}

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

int main()
{
    int n, k, tmp;
    scanf("%d %d", &n, &k);
    queue<int> q;
    for (int i = 1; i <= n; i++)
    {
        q.push(i);
    }
    printf("<");
    while (n--)
    {
        for (int i = 0; i < k - 1; i++)
        {
            q.push(q.front());
            q.pop();
        }
        printf("%d", q.front());
        q.pop();
        if (n)
            printf(", ");
    }
    printf(">");
}

{설명}

이 문제는 큐를 사용하면 k만큼 돌아가며 출력하면 되는 문제이다.

먼저 1부터 n까지를 큐에 넣고 n개를 출력하기 때문에 반복문을 n번 반복한다.

k번째를 출력해야하기 때문에 k-1번 맨 앞의 수를 맨 뒤로 보낸 다음 현재 맨 앞의 수를 출력하고 pop 한다.

큐에 대한 설명은 여기를 참고하기 바란다.

'알고리즘 공부 > BOJ백준 풀이' 카테고리의 다른 글

[백준 10866번-C++] 덱  (0) 2021.05.07
[백준 10845번-C++] 큐  (0) 2021.05.07
[백준 1406번-C++] 에디터  (0) 2021.05.07
[백준 1874번-C++] 스택 수열  (0) 2021.05.07
[백준 20191번-C++] 줄임말  (0) 2021.05.05