https://school.programmers.co.kr/learn/courses/30/lessons/150369?language=python3
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
이 문제의 핵심은 멀리 있는 집부터 가야 최적의 동선이 나온다. 그리고 마지막 부터 보면서 거꾸로 하나씩 집을 더 갈 수 있는지 확인을 하는 것.
코드
def solution(cap, n, deliveries, pickups):
d, p, answer = 0, 0, 0
for i in range(n-1, -1, -1): // 마지막 집부터 확인
d += deliveries[i] // 배달해야할 양 확인
p += pickups[i] // 수거해야할 양 확인
while d > 0 or p > 0: // 만약 둘 중 하나가 양수라면? 무조건 물류 창고를 들려야한다
d -= cap // 물류창고를 들려야하니깐 그만큼 배달 해준거니 빼주고
p -= cap // 수거도 마찬가지로 빼준다
answer += (i + 1) * 2 // 거리는 i + 1 에 왕복으로 갔다오니 * 2
return answer