[python]白駿1158号ジョセフス問題


1158号(ジョセフ問題)



これは想像以上に難しい問題です.queueで簡単に解けます!
たとえば、問題のようにK=3の場合は、配列の前の2つのpopleft()を後ろに送信し、再びpopleft()を正しい配列にアタッチするだけです.->配列が構築されるまで繰り返します
<正解>
from collections import deque
N, K = map(int, stdin.readline().split())
human = deque()
for i in range(N):
    human.append(i+1)
re = []
while len(human) >= 1:
    for i in range(K-1):
        human.append(human.popleft())
    re.append(human.popleft())
    
#정답 출력
print('<', end='')
for i in range(N):
    if i == N-1:
        print(re[i], end='>')
    else:
        print(re[i], end=', ')