[BOJ/Python]200055号コンベアのロボット
この問題はdequeで解決した.まず、条件に従ってdequeのrotate()関数を使用してベルトとロボットを1つずつ動かし、n-1インデックスにあるロボットを取り除きます.その後、後ろからロボットリストを巡回し、次の格子にロボットがなく、次の格子の耐久度が0より大きい場合、1つの格子を移動します.この場合、ロボットがn-1インデックスに存在する可能性もあるので、n-1ビットのロボットは削除されます.また、アップロード位置にロボットがなく、アップロード位置の耐久度も0より大きい場合は、ロボットを1つアップロードします.
->ベルトを1方向に回します.
->ロボットを一方向に回転させます.
->
robot[-1]
が0に更新されました.->n-2から0まで減少したiのfor文.
-->
robot[i]
が1の場合、-->
robot[i+1]
が0で、belt[i+1]
が0より大きい場合、------>
robot[i]
とrobot[i+1]
は0と1に更新されます.(移動自動機)------>
belt[i]
マイナス1.(ロボット移動後の耐久性低下)->
robot[-1]
が0に更新されました.->
belt[0]
が0より大きい場合、robot[0]
が0に等しい場合、-->
robot[0]
が1に更新されました.-->
belt[0]
から1を減らします.->答えを1つ増やします.
->beltの0の個数がkより大きい場合、
-->while文を閉じます.
Code from collections import deque
n, k=map(int, input().split())
belt=deque(list(map(int, input().split())))
robot=deque([0]*n)
answer=0
while True:
belt.rotate(1)
robot.rotate(1)
robot[-1]=0
for i in range(n-2, -1, -1):
if robot[i]==1:
if robot[i+1]==0 and belt[i+1]>0:
robot[i], robot[i+1]=0, 1
belt[i+1]-=1
robot[-1]=0
if belt[0]>0 and robot[0]==0:
robot[0]=1
belt[0]-=1
answer+=1
if belt.count(0)>=k:
break
print(answer)
Reference
この問題について([BOJ/Python]200055号コンベアのロボット), 我々は、より多くの情報をここで見つけました
https://velog.io/@xx0hn/BOJ-Python-20055번-컨베이어-벨트-위의-로봇
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
from collections import deque
n, k=map(int, input().split())
belt=deque(list(map(int, input().split())))
robot=deque([0]*n)
answer=0
while True:
belt.rotate(1)
robot.rotate(1)
robot[-1]=0
for i in range(n-2, -1, -1):
if robot[i]==1:
if robot[i+1]==0 and belt[i+1]>0:
robot[i], robot[i+1]=0, 1
belt[i+1]-=1
robot[-1]=0
if belt[0]>0 and robot[0]==0:
robot[0]=1
belt[0]-=1
answer+=1
if belt.count(0)>=k:
break
print(answer)
Reference
この問題について([BOJ/Python]200055号コンベアのロボット), 我々は、より多くの情報をここで見つけました https://velog.io/@xx0hn/BOJ-Python-20055번-컨베이어-벨트-위의-로봇テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol