title: "[프로그래머스] 택배 배달과 수거하기 Python 파이썬 해설 (Level 2) - 이도훈"
cleanUrl: "programmers/150369"
description: "프로그래머스 Level 2 문제 [택배 배달과 수거하기]의 풀이를 정리합니다."

문제 설명 및 제한사항

아이디어 및 해결 방법

코드

def farthest(arr, start):
    # 가장 멀리 있는 0이 아닌 값의 인덱스를 리턴합니다.
    for i in range(start, 0, -1):
        if arr[i-1] != 0:
            return i
    
    return 0

def process(arr, cap, start):
    # 멀리 있는 0이 아닌 값부터 합쳐서 cap만큼 감소시킵니다.
    i, cnt = start - 1, 0
    while cnt < cap and i >= 0:
        
        if arr[i] != 0:
            arr[i] -= 1
            cnt += 1
        
        if arr[i] == 0:
            i -= 1
    
def solution(cap, n, deliveries, pickups):
    answer = 0
    
    dstart, pstart = len(deliveries), len(pickups)
    dsum, psum = sum(deliveries), sum(pickups)
    while dsum > 0 or psum > 0:
        # 이번 턴에 이동해야 할 최대 거리를 구해서 곱하기 2
        dstart = farthest(deliveries, dstart)
        pstart = farthest(pickups, pstart)
        
        dist = max(dstart, pstart)
        answer += 2*dist
        
        process(deliveries, cap, dstart)
        process(pickups, cap, pstart)
        
        dsum = max(0, dsum-cap)
        psum = max(0, psum-cap)
    
    return answer

출처

프로그래머스 코딩테스트 연습 https://school.programmers.co.kr/learn/challenges