택배 배달과 수거

최민수·2023년 2월 24일
0

알고리즘

목록 보기
10/94
⭐️
def solution(cap, n, deliveries, pickups):
    answer = 0
    
    # 먼 곳부터 배달, 수거
    deliveries = deliveries[::-1]
    pickups = pickups[::-1]
    ps_deliveries, ps_pickups = 0, 0
    
    for i in range(n):
        # 각각의 누적합
        ps_deliveries += deliveries[i]
        ps_pickups += pickups[i]
        
        # 누적합이 0 또는 음수가 될때까지 반복
        while(ps_deliveries > 0 or ps_pickups > 0):
            ps_deliveries -= cap
            ps_pickups -= cap
            answer += (n-i)*2
    
    return answer
  • 조건에 맞게 복잡한 구현을 하려고 하다보면 무조건 시간초과가 난다. (그리고 구질구질 너무 복잡해진다)
  • 최대한 일관성을 유지하는 단순한 풀이법을 생각해보자.
  • cap 과 비교하면서 배달한 상자를 매번 빼고 업데이트 할 필요 없이 한번에 cap을 빼준다.
    • 그리고 만약 값이 음수가 되더라도 다음 배달을 이미 계산한 과정이라는 것을 이해하면 아주 단순해진다.

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

profile
CS, 개발 공부기록 🌱

0개의 댓글