Algorithm

[프로그래머스 / 파이썬] 택배 배달과 수거하기

임쁘엔 2023. 7. 14. 00:51
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

정답 코드

def solution(cap, n, deliveries, pickups):
    answer = 0
    delivery = 0
    pickup = 0
    for i in range(n-1, -1, -1):
        if deliveries[i] != 0 or pickups[i] != 0:
            while delivery < deliveries[i] or pickup < pickups[i]:
                delivery += cap
                pickup += cap
                answer += (i + 1) * 2
            delivery -= deliveries[i]
            pickup -= pickups[i] 
    return answer

문제 풀이

  1. answer, delivery, pickup 변수를 0으로 초기화합니다. answer 변수는 총 걸린 시간을 저장하는 변수이고, delivery와 pickup 변수는 배달과 수거한 택배의 개수를 추적하는 변수입니다.
  2. range(n-1, -1, -1)은 n부터 0까지 역순으로 반복하는 for 루프입니다. 이는 택배 리스트를 뒤에서부터 순회하며 배달과 수거 작업을 처리하기 위함입니다.
  3. if deliveries[i] != 0 or pickups[i] != 0: 조건문은 현재 위치의 택배가 배달해야 할 택배나 수거해야 할 택배가 있는지 확인합니다. 만약 둘 중 하나라도 있을 경우에만 아래의 코드를 실행합니다.
  4. while delivery < deliveries[i] or pickup < pickups[i]: 조건문은 현재 위치의 택배를 배달하고 수거할 때까지 반복합니다. delivery 변수와 pickup 변수가 해당 위치의 택배 개수보다 작을 때까지 반복합니다.
  5. delivery += cap과 pickup += cap은 용량(cap)을 더해주는 것으로, 한 번에 최대로 용량만큼 배달하고 수거하는 것을 의미합니다.
  6. answer += (i + 1) * 2는 배달과 수거에 걸리는 시간을 계산하여 answer 변수에 더해줍니다. (i + 1) * 2는 현재 위치의 택배 개수를 시간으로 환산한 값입니다. 배달과 수거 각각에 대해 2시간이 걸리므로 (i + 1) * 2를 더해줍니다.
  7. delivery -= deliveries[i]와 pickup -= pickups[i]는 배달한 택배와 수거한 택배의 개수를 각각 차감해줍니다.
  8. 반복이 종료되면 최종적으로 answer 변수를 반환합니다.