白駿/ジョセフス問題/158
Question
質問リンク
Silver 5
ジョセフス問題は以下の通りです.
1番からN番までは、N人が1つの円に座り、正の整数K(≦N)を与えます.今は順番にK人目を除いています.一人が取り除かれると、残りの人からなる円に沿ってこの過程が続きます.この過程はN人全員がクリアされるまで続く.円上の人々が消去される順序を(N,K)−ジョセフス配列と呼ぶ.例えば、(7,3)−ジョセフス配列<3,6,2,7,5,1,4>である.
NとKをあげると(N,K)-ジョセフスシーケンスを求めるプログラムを書きます.
Input
第1行NとKは、スペースを隔てて順次与えられる.(1 ≤ K ≤ N ≤ 5,000)
例に示すように、ジョセフスシーケンスを出力します.
デフォルト構造:queue
1.N名のリストを作成します.
2.移動Kの位置で余剰演算を行い、絶対位置を求める.
3.位置の要素を削除して出力します.
Code
質問リンク
Silver 5
ジョセフス問題は以下の通りです.
1番からN番までは、N人が1つの円に座り、正の整数K(≦N)を与えます.今は順番にK人目を除いています.一人が取り除かれると、残りの人からなる円に沿ってこの過程が続きます.この過程はN人全員がクリアされるまで続く.円上の人々が消去される順序を(N,K)−ジョセフス配列と呼ぶ.例えば、(7,3)−ジョセフス配列<3,6,2,7,5,1,4>である.
NとKをあげると(N,K)-ジョセフスシーケンスを求めるプログラムを書きます.
Input
第1行NとKは、スペースを隔てて順次与えられる.(1 ≤ K ≤ N ≤ 5,000)
7 3
Output例に示すように、ジョセフスシーケンスを出力します.
<3, 6, 2, 7, 5, 1, 4>
Logicデフォルト構造:queue
1.N名のリストを作成します.
2.移動Kの位置で余剰演算を行い、絶対位置を求める.
3.位置の要素を削除して出力します.
Code
import sys
idx=0
li=[]
data=input().split()
n=int(data[0])
for i in range(n):
li.append(i+1)
k=int(data[1])-1
print('<',end='')
while li:
idx=(idx+k)%n
print(li[idx],end='')
del li[idx]
if li : print(', ',end='')
n-=1
print('>')
Reference
この問題について(白駿/ジョセフス問題/158), 我々は、より多くの情報をここで見つけました https://velog.io/@swany0509/백준-요세푸스-문제-1158テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol