반응형
출처: https://www.algospot.com/judge/problem/read/JOSEPHUS#
Input
2
6 3
40 3
Output
3 5
11 26
N = 6, K = 3 ▷ 숫자 = 1 2 3 4 5 6
① 1 제외: [2 3 4 5 6]
② 4 제외: [2 3 5 6]
③ 2 제외: [3 5 6]
④ 6 제외: [3 5]
[구현] -연결 리스트 이용.
리스트 크기가 넘을 때 처음부터 다시 count 하는 것만 주의하면 K 번째를 쉽게 count
#include <iostream>
#include <list>
using namespace std;
int C, N, K;
void josephus(){
list<int> survivor;
// 1 ~ N 숫자 push
for (int i = 1; i <= N; i++) survivor.push_back(i);
list<int>::iterator kill = survivor.begin();
while (N > 2) {
kill = survivor.erase(kill);
if (kill == survivor.end()) kill = survivor.begin();
N--;
// K번째 떨어진 숫자를 제외
for (int i = 0; i < K - 1; i++) {
kill++;
// 리스트 탐색이 순화되도록
if (kill == survivor.end()) kill = survivor.begin();
}
}
cout << survivor.front() << " " << survivor.back() << endl;
}
int main(){
cin >> C;
while (C--) {
cin >> N >> K;
josephus();
}
}
반응형
'PS 문제 풀이 > Algospot' 카테고리의 다른 글
[Algospot] 알고스팟 JUMPGAME 외발 뛰기 (0) | 2021.03.01 |
---|---|
[Algospot] 알고스팟 BRACKETS2 짝이 맞지 않는 괄호 (0) | 2021.03.01 |
[Algospot] 알고스팟 LAN 근거리 네트워크 (0) | 2021.03.01 |
[Algospot] 알고스팟 BOGGLE 보글 게임 (0) | 2021.03.01 |
[Algospot] 알고스팟 FESTIVAL 록 페스티벌 (0) | 2021.03.01 |
댓글