CS/Algorithm
[프로그래머스/Python] 택배 배달과 수거하기
sohy
2023. 5. 8. 23:28
프로그래머스 - 택배 배달과 수거하기
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
# 맨 마지막 집부터 방문하면서 방문할 때 모든 배달과 수거가 0이 되도록
def solution(cap, n, deliveries, pickups):
answer = 0
deliver = 0 # 남은 배달 가능 개수
pick = 0 # 남은 수거 가능 개수
for i in range(n-1, -1, -1):
cnt = 0
while deliver < deliveries[i] or pick < pickups[i]:
cnt += 1
deliver += cap
pick += cap
deliver -= deliveries[i]
pick -= pickups[i]
answer += (i + 1) * cnt
return answer * 2
- i번째 집에 택배를 배달하고 수거하기 위해서는 i까지 무조건 가야 한다.
- 마지막 집부터 방문을 하면서 각각의 집을 방문할 때 모든 택배를 배달/수거 한다.
- 현재 배달/수거 가능한 택배 개수를 각각 deliver, pick 변수에 저장한다.
- 배송/수거를 하면서 이동한 거리를 answer 변수에 저장한다.
- 각각의 집에서 택배를 배달/수거 하는 데 필요한 배달/수거 개수가 잔여 배달/수거 택배 개수(deliver, pick) 보다 클 경우, 해당 집까지 한 번 더 와야 함을 의미한다.
- 따라서 잔여 개수가 커질 때까지 물류창고에서 해당 집까지 왔다 갔다 해야 한다. 몇 번 왔다 갔다 해야 하는지 횟수를 cnt 변수에 저장한다.
- 해당 위치까지 이동한 횟수(cnt)를 구해준 뒤 answer에 더해준다.