문제 설명 및 제한사항
아이디어 및 해결 방법
코드
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