8000 Merge pull request #104 from HeoTaeYang/OS-1158 · Groot-Space/basic-algo-lecture@0c7ed78 · GitHub
[go: up one dir, main page]

Skip to content

Commit 0c7ed78

Browse files
Merge pull request encrypted-def#104 from HeoTaeYang/OS-1158
Update 1158.cpp
2 parents f294174 + 6d2c9a9 commit 0c7ed78

File tree

1 file changed

+41
-4
lines changed

1 file changed

+41
-4
lines changed

0x04/solutions/1158.cpp

Lines changed: 41 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,48 @@
1-
// Authored by : BaaaaaaaaaaarkingDog
1+
// Authored by : OceanShape
22
// Co-authored by : -
3-
// http://boj.kr/****************
3+
// http://boj.kr/b7f7b82420c74d43b13c398fc6c73841
44
#include <bits/stdc++.h>
55
using namespace std;
66

7+
int N, K, len = 0;
8+
9+
// 리스트에서 이전 노드/다음 노드를 가리키는 변수
10+
int pre[5001];
11+
int nxt[5001];
12+
// 요세푸스 순열을 저장하는 변수
13+
vector<int> v;
14+
715
int main(void){
816
ios::sync_with_stdio(0);
917
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+
}

0 commit comments

Comments
 (0)
0