[프로그래머스] Level 3 정수 삼각형 - 동적계획법

Jun·2025년 2월 28일

알고리즘

목록 보기
6/19

문제 링크

바로가기

문제 풀이

function solution(triangle) {    
    for(let i = 1; i < triangle.length; ++i) {
        for(let j = 0; j < triangle[i].length; ++j) {
            if(j === 0) triangle[i][j] += triangle[i - 1][0];
            else if(j === triangle[i].length - 1) triangle[i][j] += triangle[i - 1][j - 1];
            else triangle[i][j] += Math.max(triangle[i - 1][j - 1], triangle[i - 1][j])
        }
    }
    
    return Math.max(...triangle[triangle.length - 1]);
}

풀이

레벨 3 문제치고는 쉬웠다.

위에서 아래로 내려가면서 더해주는 원리인데, 가장자리(처음, 마지막)에 있는 원소들은 두 가지 숫자를 고를 수 없이 바로 위에 있는 애들을 더해주어야 하고, 중간에 있는 원소들은 위에 두 수 중에 최댓값을 더해주면 된다.

가장 위에 있는 원소는 더해질 필요가 없으니 두번째 라인부터 반복분을 진행하면서 위에있는 원소를 더해주는 작업을 한다. 이때 앞서 말한 규칙대로 더해준다.

마지막으로 리턴할 때 가장 밑에 있는 배열의 최댓값을 구해서 리턴해주면된다.

결과

새롭게 배운 점

  1. Math.max 메서드는 배열을 받지 않기 때문에 스프레드 연산자로 배열을 풀어줘야함.
  2. 파이썬은 배열에 -1 인덱스를 넣어서 마지막 원소에 접근이 가능한데 JS는 안되네..
profile
2D | 3D 프론트엔드 개발자

0개의 댓글