📌 문제
💯 정답
import sys
input = sys.stdin.readline
n, k = map(int, input().split())
plist = list(i for i in range(1, n+1))
ans = []
num = 0
for _ in range(n):
num += k-1
if num >= len(plist):
num %= len(plist)
ans.append(str(plist.pop(num)))
print("<",", ".join(ans), ">", sep="")
📝 설명
• num이 제거해야하는 사람의 인덱스를 가리키는 변수라고 할때,
num은 0부터 시작하고 사람은 1번부터 시작하므로 k-1로 누적해나가야 한다.
(또한, 한 사람을 제거한후 뒷 순서 사람의 인덱스도 1이 줄기 때문이다)
• num이 한바퀴를 돌아 오면 그동안 누적되었던 값을 reset하고 다시 정의해야한다.
이 값은 현재 사람의 수로 나눈 나머지값으로 정의하면 된다.
• 위의 로직을 따른 후 해당하는 num값을 인덱스로 가지는 값을 pop하면 된다.
🙏 참고
👉 백준 (boj) 파이썬 - 1158 요세푸스 문제