[백준/파이썬] 1158번 요세푸스 문제 풀이

업데이트:



문제 정보


풀이

문제

1..N 사람이 원형으로 서 있을 때, K번째 사람을 반복적으로 제거한 순서를 출력하는 문제입니다.

코드

class Node:
    def __init__(self,value, nxt=None):
        self.value = value
        self.nxt = nxt
n, k = map(int, input().split())
start = node = Node(0)
for i  in range(1, n+1):
    tmp = Node(i)
    node.nxt = node = tmp
node.nxt, node = start.nxt, start

result = []
for _ in range(n):
    for __ in range(k):
        tmp, node = node, node.nxt
    result.append(node.value)
    tmp.nxt = node.nxt
print("<"+", ".join(map(str, result))+">")

설명

단일 연결리스트를 원형으로 구성한 뒤, 매번 K칸 이동해 해당 노드를 제거합니다.

제거된 값을 result에 순서대로 저장하고, 문제 형식(<a, b, c>)에 맞춰 출력합니다.



댓글남기기