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

#문제

백준 1158번 요세푸스 문제

#풀이

#include <iostream>
#include <vector>

using namespace std;

vector<int> vec;

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    
    int n, k;
    cin >> n >> k;
    
    for (int i = 0; i < n; ++i)
    {
        vec.push_back(i+1);
    }
    
    cout << '<';
    
    int idx = 0;
    
    while(1 < vec.size())
    {
        idx = (idx + k - 1) % vec.size();
        
        cout << vec[idx] << ", ";
        vec.erase(vec.begin() + idx);
    }
    
    cout << vec[0] << '>';
    
    return 0;
}

#정리

n개의 원소를 배열로 받아, k번째 원소를 출력/삭제하며 줄여가는 문제. 인덱스를 선언하여 출력할 원소를 연산하는 것이 포인트, 출력한 원소는 배열에서 삭제하고 모든 원소가 출력될 때까지 반복하여 해결.




    Enjoy Reading This Article?

    Here are some more articles you might like to read next:

  • [백준] 1940번 주몽 / C++
  • [백준] 11653번 소인수분해 / C++
  • [백준] 11650번 좌표 정렬하기 / C++
  • [백준] 9613번 GCD 합 / C++
  • [백준] 1920번 수 찾기 / C++