queue를 사용하여 해결할 수 있다.
K번째마다 수를 지워나가므로 K번째 순서가 다가오기 전까지는 맨 앞에 요소를 계속 뒤로 보낸다. K번째 순서가 됐을때 맨 앞 요소를 제거한후 다음 K번째 순서가 될때까지 맨 앞에 요소를 뒤로 보낸다.
//백준 11866, 요세푸스 문제 0
#include <iostream>
#include <deque>
std::deque<int> d;
int main (){
int N, K;
std::cin >> N >> K;
for(int i{1}; i<=N; ++i){
d.push_back(i);
}
int turn{1};
std::cout << "<";
while(d.size() != 1){
if(turn == K){
std::cout << d.front() << ',' << ' ';
d.pop_front();
turn = 1;
}
else{
int tmp = d.front();
d.pop_front();
d.push_back(tmp);
++turn;
}
}
std::cout << d.front() << ">";
return 0;
}