[アルゴリズム]BOJ 11866ジョセフ問題0


[BOJ]1866ジョセフス問題0題ショートカットキー
📍 質問する
ジョセフス問題は以下の通りです.
1番からN番までは、N人が1つの円に座り、正の整数K(≦N)を与えます.今は順番にK人目を除いています.一人が取り除かれると、残りの人からなる円に沿ってこの過程が続きます.この過程はN人全員がクリアされるまで続く.円上の人々が消去される順序を(N,K)−ジョセフス配列と呼ぶ.例えば、(7,3)−ジョセフス配列<3,6,2,7,5,1,4>である.
NとKをあげると(N,K)-ジョセフスシーケンスを求めるプログラムを書きます.
📍 入力
第1行NとKは、スペースを隔てて順次与えられる.(1 ≤ K ≤ N ≤ 1,000)
📍 しゅつりょく
例に示すように、ジョセフスシーケンスを出力します.
📍 に答える
ハーモニー
from sys import stdin
from collections import deque

N, K = map(int,stdin.readline().split())
P = deque(i for i in range(1,N+1)) # [1, 2, 3, ..., N-1, N] 
count = 0 # 현재까지 출력한 원소 갯수
print("<",end="")

while count < N: # 현재까지 출력한 원소 갯수가 N보다 작을때 반복실행
  for _ in range(K-1): # K-1 횟수만큼 반복
    P.append(P.popleft()) # deque P의 제일 앞의 원소를 맨 뒤로 보냅니다.
  print(P.popleft(),end="") # K 번째 원소를 출력
  count+=1 # 현재 출력한 원소 갯수 1 증가
  if count < N: # 현재 출력한 원소 갯수가 N보다 작으면
    print(", ",end="") # 쉼표 출력
  else: # 현재 출력한 원소 갯수가 N과 같아지면
    print(">") # 닫기 출력