[Python] 백준 11866 요세푸스 문제0

eun·2024년 1월 24일

문제 11866

먼저 위 문제를 이해해보자.

  • 첫째줄에는 n명의 사람과 정수 k가 주어진다.
  • n명의 사람이 원을 이뤄 앉아있을 때 순서대로 k번째 사람을 제거한다.
  • 제거한 사람의 순서대로 출력하는 문제이다.
# 11866

import sys

n, k = map(int, sys.stdin.readline().split())

lst = []
ans = []
for i in range(1, n + 1):
    lst.append(i)
    

idx = 0
while lst:
    idx += k - 1
    if idx >= len(lst):
        idx %= len(lst)
    ans.append(str(lst.pop(idx)))
    

print("<", ", ".join(ans), ">", sep="")

이 문제에서 까다로웠던 점은 리스트에서 값이 계속 삭제되어 인덱스가 변한다는 점이었다. 또한 리스트가 계속 짧아지면서 k번째 이후의 인덱스가 리스트의 크기보다 같거나 클 때 새로운 인덱스를 구하는 방법에 있어서 어려움이 있었다.
위 문제는 만약 인덱스가 리스트의 크기보다 같거나 클 때 인덱스를 리스트의 길이로 나눈 나머지를 다시 새로운 인덱스로 할당하여 문제를 해결했다.

0개의 댓글