File tree Expand file tree Collapse file tree 1 file changed +41
-4
lines changed Expand file tree Collapse file tree 1 file changed +41
-4
lines changed Original file line number Diff line number Diff line change 1
- // Authored by : BaaaaaaaaaaarkingDog
1
+ // Authored by : OceanShape
2
2
// Co-authored by : -
3
- // http://boj.kr/****************
3
+ // http://boj.kr/b7f7b82420c74d43b13c398fc6c73841
4
4
#include < bits/stdc++.h>
5
5
using namespace std ;
6
6
7
+ int N, K, len = 0 ;
8
+
9
+ // 리스트에서 이전 노드/다음 노드를 가리키는 변수
10
+ int pre[5001 ];
11
+ int nxt[5001 ];
12
+ // 요세푸스 순열을 저장하는 변수
13
+ vector<int > v;
14
+
7
15
int main (void ){
8
16
ios::sync_with_stdio (0 );
9
17
cin.tie (0 );
10
-
11
- }
18
+ cin >> N >> K;
19
+
20
+ // 원형 연결 리스트 생성
21
+ // 맨 처음 노드와 마지막 노드가 서로를 가리키도록 지정
22
+ for (int i = 1 ; i <= N; ++i){
23
+ pre[i] = (i == 1 ) ? N : i - 1 ;
24
+ nxt[i] = (i == N) ? 1 : i + 1 ;
25
+ ++len;
26
+ }
27
+
28
+ int i = 1 ;
29
+ // 연결 리스트를 순회하며 순열 생성
30
+ for (int cur = 1 ; len != 0 ; cur = nxt[cur]){
31
+ // K 번째일 때 제거
32
+ if (i == K){
33
+ pre[nxt[cur]] = pre[cur];
34
+ nxt[pre[cur]] = nxt[cur];
35
+ v.push_back (cur);
36
+ i = 1 ;
37
+ --len;
38
+ } else ++i;
39
+ }
40
+
41
+ // 요세푸스 순열 출력
42
+ cout << " <" ;
43
+ for (size_t i = 0 ; i < v.size (); ++i) {
44
+ cout << v[i];
45
+ if (i != v.size () - 1 ) cout << " , " ;
46
+ }
47
+ cout << " >" ;
48
+ }
You can’t perform that action at this time.
0 commit comments