log 2021-09-30
sport
bj 20055 - 컨베이어 벨트 위의 로봇
입력크기가 크지 않아서 비효율적인 방법으로도 충분히 될 거라고 생각했는데, 생각보다 기본 처리에서 조회 연산으로 시간이 들어서 그런지 python3로는 시간초과가 나고, pypy3로 제출해서 통과했다.
어이없는 실수가 있었는데, 한참을 못 찾았다.
py solution
lower_belt는 문제의 인덱스를 따라 역순으로 배치해야 문제에서 나온 형태로 배치하게 되는 것인데, 그냥 arr[N:]
을 써서 틀린 것이었다.
def solve():
from collections import deque
N,K = ria()
arr = ria()
upper_belt = deque(arr[:N])
lower_belt = deque(reversed(arr[N:]))
robots = [0] * N
zeros = 0
step = 0
def move_belt():
nonlocal zeros
for i in reversed(range(N)):
if(i == N-1):
robots[i] = 0
elif(robots[i+1] == 0 and robots[i] == 1):
robots[i] = 0
robots[i+1] = 1
if(i+1==N-1):
robots[i+1] = 0
last_upper_belt_item = upper_belt[-1]
first_lower_belt_item = lower_belt[0]
upper_belt.pop()
upper_belt.appendleft(first_lower_belt_item)
lower_belt.popleft()
lower_belt.append(last_upper_belt_item)
def load_robot():
nonlocal zeros
if(upper_belt[0] > 0):
upper_belt[0] -= 1
if(upper_belt[0] == 0):
zeros += 1
robots[0] = 1
def move_robots():
nonlocal zeros
for i in reversed(range(N)):
# print(i)
if(i == N-1):
if(robots[i] == 1):
robots[i] = 0
elif(upper_belt[i+1] > 0 and robots[i+1] == 0 and robots[i] == 1):
robots[i] = 0
robots[i+1] = 1
upper_belt[i+1] -= 1
if(upper_belt[i+1] == 0):
zeros += 1
while(zeros < K):
move_belt()
move_robots()
load_robot()
step+=1
print(step)
return
Comments