[백준 #1158] 요세푸스 문제

MJ·2021년 7월 18일
0

알고리즘(PS)

목록 보기
20/30

1. 문제 설명

2. 해설

큐의 처음과 끝이 연결되어 있는, 원형 큐를 적용하여 해결할 수 있다.

그림으로 설명하자면, K-1의 주기로 start와 target index가 회전한다. 인덱스의 회전은 인덱스에 k-1을 더해준 다음 그 사이클의 큐의 길이만큼 나머지 연산을 해주면 쉽게 구할 수 있다.

3. 코드

import sys
input = sys.stdin.readline

n, k = map(int, input().split())
queue = [i for i in range(1, n+1)]
res = []

idx = k - 1
while queue:
    if idx >= len(queue):
        idx = idx%len(queue)

    res.append(queue[idx])
    del queue[idx]

    idx += k - 1


print("<", end="")
print(", ".join(map(str, res)), end="")
print(">")
profile
오늘보다 내일을 더 즐겁게

0개의 댓글