Algorithm/백준과 프로그래머스

[C++] 1158. 요세푸스

young_3060 2023. 7. 15. 20:00
728x90

문제풀이

처음에는 연결리스트 사용해서 circular queue를 사용해야겠다고 생각했다.

하지만 복잡하기 때문에 그냥 단순하게 필요한 순번의 번호가 나올때까지 뽑아서 다시 Queue 뒤에 저장하는 방식으로 야매 circular queue를 구현했다.

 

  1. Queue에 N만큼의 정수를 저장해준다.
  2. K-1번째까지의 원소를 pop해서 Queue 뒤에 push해준다.
  3. K번째의 원소를 pop해준다.
  4. Queue에 원소가 1개 남을때까지 반복해준다. (출력 형식때문에)
  5. 마지막원소를 출력해주고 마무리한다.

코드

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

int main(void)
{
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    int N, k; cin >> N >> k;
    queue<int> arr, result;
    for(int i=1; i<=N; i++) arr.push(i);

    cout << "<";

    while(arr.size() > 1) {
        for (int i=0; i<k; i++)
        {
            int temp = arr.front();
            arr.pop();
            if(i==k-1) cout << temp << ", ";
            else arr.push(temp);
        }
    }
    cout << arr.front() << ">\n";

    return 0;
}

 

728x90

'Algorithm > 백준과 프로그래머스' 카테고리의 다른 글

[C++] 1935. 후위 표기식2  (1) 2023.07.16
[C++] 2164. 카드2  (0) 2023.07.16
[C++] 9012. 괄호  (0) 2023.07.14
[C++] 10828. 스택  (0) 2023.07.11
[C++] 2751. 수 정렬하기 2  (0) 2023.07.06