차곡차곡

[BOJ/Python] 백준 11866번 - 요세푸스 문제0 본문

CS/Algorithm

[BOJ/Python] 백준 11866번 - 요세푸스 문제0

sohy 2022. 5. 18. 00:17

백준 #11866 요세푸스 문제0

 

11866번: 요세푸스 문제 0

첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 1,000)

www.acmicpc.net

import sys
input = sys.stdin.readline

n, k = map(int, input().split())   # n: 인원 수, k: K번째 사람 제거
people = list(range(n))

num = k - 1   # 제거할 사람 인덱스
pmt = []   # 제거된 사람들
while True:
    pmt.append(str(people.pop(num) + 1))
    if len(people) == 0:
        break
    n -= 1
    num += k - 1
    if num >= n:
        while num >= n:
            num = num - n

print("<"+', '.join(pmt)+">")
  1. 인원 수 크기의 인덱스 번호를 담은 리스트(people)를 만들어준다.
  2. 해당 리스트는 0번부터 시작하기 때문에 k-1번째 위치에 있는 사람을 제거한다.
  3. 제거된 사람 기준 k-1번째 있는 사람을 반복해서 지우면 되는데, 이때 지우려는 사람의 인덱스가 리스트 크기보다 커지면 인덱스가 리스트 크기보다 작아질 때까지 리스트 크기를 빼준다.

Comments