차곡차곡

[프로그래머스/Python] 택배 배달과 수거하기 본문

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
  1. i번째 집에 택배를 배달하고 수거하기 위해서는 i까지 무조건 가야 한다.
  2. 마지막 집부터 방문을 하면서 각각의 집을 방문할 때 모든 택배를 배달/수거 한다.
  3. 현재 배달/수거 가능한 택배 개수를 각각 deliver, pick 변수에 저장한다.
  4. 배송/수거를 하면서 이동한 거리를 answer 변수에 저장한다.
  5. 각각의 집에서 택배를 배달/수거 하는 데 필요한 배달/수거 개수가 잔여 배달/수거 택배 개수(deliver, pick) 보다 클 경우, 해당 집까지 한 번 더 와야 함을 의미한다.
  6. 따라서 잔여 개수가 커질 때까지 물류창고에서 해당 집까지 왔다 갔다 해야 한다. 몇 번 왔다 갔다 해야 하는지 횟수를 cnt 변수에 저장한다.
  7. 해당 위치까지 이동한 횟수(cnt)를 구해준 뒤 answer에 더해준다.
Comments