백준 11866번 python 풀이 - 요세푸스 문제0
문제 링크
해결책
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import sys
class Node:
def __init__(self, val: int):
self.val = val
self.ptr = None
class Circle_queue:
def __init__(self, limit: int = 1000):
self.que = [None] * limit
self.start = None
self.end = None
self.len = 0
def queue(self, val):
node = Node(val)
if self.len == 0:
self.start = node
else:
self.end.ptr = node
self.end.ptr = node
self.len += 1
self.end = node
node.ptr = self.start
def cut(self, jump):
cur_node = self.start
if (jump == 1):
self.end.ptr = cur_node.ptr
self.start = cur_node.ptr
return cur_node.val
for i in range(jump - 2):
cur_node = cur_node.ptr
temp = cur_node.ptr.val
self.start = cur_node.ptr.ptr
cur_node.ptr = cur_node.ptr.ptr
return temp
N, K = map(int, sys.stdin.readline().rstrip().split())
my_queue = Circle_queue()
for i in range(1,N+1):
my_queue.queue(i)
print("<", end="")
for i in range(N-1):
print(my_queue.cut(K), end=", ")
print(my_queue.cut(K), end=">")
주석으로 달 설명
큐 문제 라고는 써있지만… 큐 + 연결 리스트로 풀었다. 큐보다 오히려 연결 리스트의 포인터로 해결한 기분? 그냥 조건대로 직관대로 연결 리스트로 구현했다. 다만, 그 위의 큐를 두어서, 연결 리스트를 관리하는 형태로 구현했는데… 이게 좋은 방법인지는 조금 고려할 필요가 있는것 같다.
This post is licensed under CC BY 4.0 by the author.