본문 바로가기
알고리즘

[DP] 정수 삼각형

by limew 2023. 8. 31.

https://school.programmers.co.kr/learn/courses/30/lessons/43105?language=javascript 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

 

첫 풀이

function solution(triangle) {
    var answer = 0;
    let memo = [7];
    for (let r = 1; r < triangle.length; r++) {
        const newMemo = [];
        for (let c = 0; c < triangle[r].length; c++) {
            const currValue = triangle[r][c];
            // 맨 처음이거나 마지막 인덱스
            const before = c-1 < 0 ? 0 : memo[c-1];
            const now = memo[c] || 0;
            newMemo[c] = Math.max(before, now) + currValue;
        }
        memo = newMemo;
    }
    return memo.sort((a, b) => b-a)[0];
}

로직

현재위치까지 오는데 최댓값을 구하는 공식

현재위치까지 최대값 = arr[이전의 항][이전 열]와 arr[이전의 항][현재 열] 중 최댓값 + 현재위치의 값
arr[r][c] = Math(arr[r-1][c-1], arr[r-1][c])

 

이 전 행까지 메모제이션을 해온다

memo = [
  [ 7 ],
  [ 10, 15 ],
  [ 18, 16, 15 ],
  [ 20, 25, 20, 19 ],
  [ 24, 30, 27, 26, 24 ]
]

 

첫열과 마지막 열은 arr[][]값이 없으므로  (undefined || 0)로 계산

function solution(triangle) {
    for (let i = 1; i < triangle.length; i++) {
        for (let j = 0; j < triangle[i].length; j++) {
            triangle[i][j] += Math.max(triangle[i-1][j-1] || 0, triangle[i-1][j] || 0);
        }
    }
    // return triangle[triangle.length-1].sort((a, b) => b-a)[0];
    return Math.max(...triangle[triangle.length-1]);
}

 

효율성이 통과가 안 됐다. 왜?

 

for 루프에서 i++, j++를 i +=1, j +=1로 바꿔주니 통과.. 왜???

 

function solution(triangle) {
    for (let i = 1; i < triangle.length; i +=1) {
        for (let j = 0; j < triangle[i].length; j+=1) {
            triangle[i][j] += Math.max(triangle[i-1][j-1] || 0, triangle[i-1][j] || 0);
        }
    }
    // return triangle[triangle.length-1].sort((a, b) => b-a)[0];
    return Math.max(...triangle[triangle.length-1]);
}

 

'알고리즘' 카테고리의 다른 글

[DP] 스티커 모으기(2), 도둑질  (0) 2023.09.01
[DP] 땅따먹기  (0) 2023.08.31
[DP] 가장 큰 정사각형 찾기  (0) 2023.08.31
[Hash] 주차 요금 계산  (0) 2023.08.31
[프로그래머스 카카오블라인드] 문자열 압축  (0) 2023.08.30