Koala - 15기/기초 알고리즘 스터디

[BOJ/Python3] 11866번 요세푸스 문제 0

synthcom 2024. 8. 19. 00:24

https://www.acmicpc.net/problem/11866

알고리즘 분류
구현
자료구조

n, k = map(int, input().split())
n_lst = list(range(1, n+1))
ans = []
i = k-1

while n_lst:
    ans.append(n_lst.pop(i))
    if i == len(n_lst): i = 0
    for _ in range(k-1):
        i += 1
        if i == len(n_lst): i = 0
print('<' + ', '.join(map(str, ans)) + '>')

문제풀이
1부터 n까지 들어있는 리스트가 모두 사라질때까지 반복
index = i 인 수를 pop()하고 정답 리스트에 append()
pop()을 통해 이후 인덱스가 1씩 줄었으므로  이후 k번째 수를 제거하기 위해 i에 k - 1 을 더함
그냥 k - 1을 더하면 리스트에 끝에 도달했을때 처음으로 돌아갈 수 없으므로 1씩 더하면서 끝에 도달하면 i에 0 대입
pop()을 통해 현재의 i가 리스트 인덱스에서 벗어날 수 있으므로 pop()한 직후에도 위 검증 수행
ans를 정답 형식에 맞춰 출력