https://school.programmers.co.kr/learn/courses/30/lessons/150369
간단한 문제라서 나이브하게 풀었다.
가장 뒤에 있는 box부터 처리하게 하는 방식으로 풀었다.
def findNonZero(arr, end):
'''
end라는 인덱스부터 시작하여 값이 zero가 아닌 인덱스를 리턴하는 함수
'''
for i in reversed(range(end + 1)):
if arr[i] != 0:
return i
return -1
def eliminateBox(arr, idx, cap):
'''
인덱스가 큰 것부터 처리하는 함수
'''
if idx < -1:
return -1
for i in reversed(range(idx + 1)):
if arr[i] >= cap:
arr[i] = arr[i] - cap
return findNonZero(arr, idx)
elif arr[i] < cap:
cap = cap - arr[i]
arr[i] = 0
return -1
def solution(cap, n, deliveries, pickups):
answer = 0
d_idx = findNonZero(deliveries, len(deliveries) - 1)
p_idx = findNonZero(pickups, len(pickups) - 1)
while (d_idx >= 0 or p_idx >= 0):
# d_idx 와 p_idx 에는 상자가 있어야함
d_cap = cap
p_cap = cap
answer = answer + max(d_idx, p_idx) + 1
d_idx = eliminateBox(deliveries, d_idx, d_cap)
p_idx = eliminateBox(pickups, p_idx, p_cap)
return answer * 2
findNonZero 함수 부족한 점
eliminateBox 함수 부족한 점
solution