프로그래머스 LEVEL 2(택배 배달과 수거하기)

image

  • 사용 언어 : javascript

  • 해결 날짜 : 2023-05-15

  • 해결 방법 :

    • dp를 활용해 문제 해결
      • 먼 거리부터 배달, 수거하는 것이 최소 이동 거리이므로 마지막 인덱스부터 탐색
      • 현재 인덱스의 dp값을 다음 인덱스(i + 1)에서 각각 deliveries[i], pickups[i] 뺀 값으로 업데이트
        • 뺐을 때 둘 중 하나라도 0 미만인 경우(현재 인덱스까지 1번 이상 도달해야 배달과 수거를 완료할 수 있는 경우)
          • 완료할 수 있을 때 까지 dp cap만큼 증가하여 업데이트
  • 회고 :

    • x
  • 코드

    function solution(cap, n, deliveries, pickups) {
      let answer = 0;
      const dp = Array.from({ length: n + 1 }, () => [0, 0]);
    
      for (let i = n - 1; i >= 0; i--) {
        dp[i][0] = dp[i + 1][0] - deliveries[i];
        dp[i][1] = dp[i + 1][1] - pickups[i];
    
        if (dp[i][0] < 0 || dp[i][1] < 0) {
          const distance = (i + 1) * 2;
          let repeat = 0;
    
          while (dp[i][0] < 0 || dp[i][1] < 0) {
            dp[i][0] += cap;
            dp[i][1] += cap;
            repeat += 1;
          }
    
          answer += distance * repeat;
        }
      }
    
      return answer;
    }
    
  • 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges