Search
Duplicate

택배 배달과 수거하기

문제 설명 및 제한사항

아이디어 및 해결 방법

코드

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
Python
복사

출처

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