본문 바로가기

알고리즘/프로그래머스

[프로그래머스]Lv2. 택배 배달과 수거하기(Python)

https://school.programmers.co.kr/learn/courses/30/lessons/150369

 

프로그래머스

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

programmers.co.kr

 

문제 이해 

 

1. i 번째 집에 택배를 배달/수거하기 위해서는 i 번째까지는 무조건 가야 한다.

2. 마지막 집에 우선 cap을 실어 출발

3. 마지막 집부터 처음 집으로 이동하면서 현재 배달/수거 가능한 택배 개수를 넣어 저장할 변수를 만든다.

     => deliver_remain, pick_remain

4. 배달/수거하면서 이동한 거리를 answer라는 변수에 저장

5. 택배를 배달/수거하는데 필요한 배달/수거 개수가 잔여 배달/수거 개수(deliver_remain, pick_remain)보다 클 경우, 그 집까지 한 번 더 와야함 => 배달 가능한 개수 + cap

 

코드
def solution(cap, n, deliveries, pickups):
    answer = 0  # 총 이동 횟수
    deliver_remain = 0  # 현재 배달 가능한 개수
    pick_remain = 0  # 현재 수거 가능한 개수

  # 맨 마지막 집부터 첫 번째 집까지 역순으로 반복
    for i in range(n-1, -1, -1):
        cnt = 0  # 한 집에서의 이동 횟수

        while deliver_remain < deliveries[i] or pick_remain < pickups[i]:
            cnt += 1  
            deliver_remain += cap  
            pick_remain += cap  

    
        deliver_remain -= deliveries[i]
        pick_remain -= pickups[i]
        
        answer += (i + 1) * cnt

  # 왕복 거리
    return answer * 2

 

문제 회고

 

역순으로 돌면서 체크한다는 것과 변수 설정이 어려웠다