Computer >> 컴퓨터 >  >> 프로그램 작성 >> JavaScript

JavaScript에서 합이 가장 작은 경로

<시간/>

문제

숫자의 2차원 배열을 첫 번째이자 유일한 인수로 사용하는 JavaScript 함수입니다.

우리의 함수는 각 행에서 정확히 하나의 요소를 선택하여 2차원 배열에서 경로를 찾아야 하며 인접한 행에서 선택한 두 요소는 같은 열에 있어서는 안 됩니다. 이 모든 경로 중에서 우리 함수는 최소 합을 갖는 경로의 합을 반환해야 합니다.

예를 들어, 함수에 대한 입력이 -

인 경우
const arr = [
   [4, 7, 1],
   [2, 8, 3],
   [5, 6, 9]
]

그러면 출력은 다음과 같아야 합니다. -

const output = 9;

출력 설명

모든 유효한 경로는 -

이기 때문에
4, 8, 9 4, 8, 6 4, 3, 6 4, 3, 5
7, 2, 6 7, 2, 9 7, 3, 6 7, 3, 5
1, 2, 6 1, 2, 9 1, 8, 9 1, 8, 5

그리고 이 모든 것 중에서 [1, 2, 6]의 합이 9가 가장 작습니다.

예시

이에 대한 코드는 -

const arr = [
   [4, 7, 1],
   [2, 8, 3],
   [5, 6, 9]
]
const minimumPathSum = (arr = []) => {
   let first = [0, null];
   let second = [0, null];
   for(let row = arr.length - 1; row >= 0; row--){
      let curr1 = null;
      let curr2 = null;
      for(let column = 0; column < arr[row].length; column++){
         let currentSum = arr[row][column];
         if(column !== first[1]){
            currentSum += first[0];
         }else{
            currentSum += second[0];
         };
         if(curr1 === null || currentSum < curr1[0]){
            curr2 = curr1;
            curr1 = [currentSum, column];
         }else if(curr2 === null || currentSum < curr2[0]){
            curr2 = [currentSum, column];
         };
      };
      first = curr1;
      second = curr2;
   };
   return first[0];
};
console.log(minimumPathSum(arr));

출력

콘솔의 출력은 -

9