[アルゴリズム]BOJ 11866ジョセフ問題0
4566 ワード
[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)
📍 しゅつりょく
例に示すように、ジョセフスシーケンスを出力します.
📍 に答える
ハーモニー
📍 質問する
ジョセフス問題は以下の通りです.
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(">") # 닫기 출력
Reference
この問題について([アルゴリズム]BOJ 11866ジョセフ問題0), 我々は、より多くの情報をここで見つけました https://velog.io/@isayaksh/알고리즘-BOJ-11866-요세푸스-문제-0テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol