https://www.acmicpc.net/problem/1158
1158번: 요세푸스 문제
첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000)
www.acmicpc.net
// 코드
#include <bits/stdc++.h>
using namespace std;
int main(){
list<int> L;
int N, K, e;
cin >> N >> K;
int num[N];
for(int i = 1; i <= N; i++) L.push_back(i);
list<int>::iterator t = L.begin();
for(int j = 0; j < N; j++)
{
e = L.back();
// list L의 끝수 저장
for(int k = 0; k < K-1; k++)
{
if(e == *t) t = L.begin();
// *t가 끝수와 같을 경우 t에 첫수 주소
else t++; // 아니면 주소 +1
}
num[j] = *t;
// 삭제하는 순서대로 저장
if(e == *t)
{
L.erase(t);
t = L.begin();
// 끝수를 지웠을 경우 t의 지점을 첫수 주소로 저장
}
else t = L.erase(t);
}
// 출력
cout << "<";
for(int k = 0; k < N; k++)
{
cout << num[k];
if(k != N-1) cout << ", ";
}
cout << ">";
return 0;
}
'알고리즘' 카테고리의 다른 글
[백준/C++] 1436 영화감독 숌 (0) | 2022.06.23 |
---|---|
[백준/C++] 1874번 스택 수열 (0) | 2021.12.05 |
[백준/C++] 1259번 팰린드롬수 (0) | 2021.12.04 |
[백준/C++] 5397번 키로거 List (1) | 2021.12.03 |
[백준/C++] 3273번 두 수의 합 (0) | 2021.11.29 |