from collections import deque
def solution(order):
answer = 0
q = deque(order)
sub = []
box = 1
while q:
# 박스를 바로 실는 경우
if box == q[0]:
q.popleft()
answer += 1
box += 1
# 서브 컨테이너 밸트에서 실는 경우
elif sub and sub[-1] == q[0]:
sub.pop()
q.popleft()
answer += 1
# 서브 컨테이너에 박스를 넣는 경우
elif box < q[0]:
sub.append(box)
box += 1
# 더 이상 실을 수 없는 경우
elif box != q[0] and sub and sub[-1] != q[0] and box > sub[-1]:
break
return answer
이 문제는 각각의 행위에 대한 조건을 찾는게 포인트였다. 내가 찾기 어려웠던 조건은 서브 컨테이너 밸트에 실는 조건이었다. 그래서 아래와 같이 작은 스케일에서 법칙을 찾아보고자 했다.
박스 1
택배기사
보조 1
박스 2
택배기사
보조 1 2
박스 3
택배기사
보조 1 2 3
박스 4
택배기사 4
보조 1 2 3
박스 5
택배기사 4 3
보조 1 2
여기서 보면 5에서 종결이 되었다. 그런데 사실 5에서 끝내지 않고 서브 컨테이너 밸트에 넣는 선택지가 있었는데도 종결이 되었다. 이는 곧 박스의 수가 다음에 실을 박스보다 크기가 작을 때만 서브 컨테이너 밸트에 넣기 때문이다. 이를 통해 서브 컨테이너 밸트에 넣는 조건을 알게 되었다.