Algorithm/Math
(C++) - BOJ(1242번) : 소풍
하눤석
2022. 1. 26. 09:25
728x90
https://www.acmicpc.net/problem/1242
- 해설 :
요세푸스 순열(https://recordofwonseok.tistory.com/96)과 똑같은 문제인데 내가 몇 번째로 탈락하는지만 추가적으로 찾으면 되는 문제이다.
- 풀이 :
옛날에 풀었던 문제라 기억이 잘 안난다. 소스를 참고로 해석해보자면 n은 퇴장당한 사람의 수이다. 매 퇴장당하는 경우마다 mod값을 이용하여 다음 퇴장당할 사람을 계산하는 방식인 것 같다.
- 소스코드 :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
#include <bits/stdc++.h>
using namespace std;
int N, M, K;
int main(){ios_base::sync_with_stdio(false); cout.tie(NULL); cin.tie(NULL);
cin >> N >> M >> K;
int n;
// nM = M 의 변화하는 위치
for (n = 1; n <= N; n++){
int nM= M%(N-n+1)==0? N-n+1:M%(N-n+1);
if (K==nM) break;
K = K>nM ? K-nM : (K-nM)+N-n+1;
}
cout << n << '\n';
return 0;
}
|
cs |
320x100