최대 1 분 소요

코딩테스트 문제 풀이

코딩테스트를 잠깐 안 풀었다고 또 문제가 헷갈린다. 이번에는 DP 관련 문제를 풀었다.

function solution(info, n, m) {
    let dp = Array.from({ length: info.length + 1 }, () => {
        return Array(m).fill(Infinity);
    });

    dp[0][0] = 0;

    for (let i = 1; i <= info.length; i++) {
        let [a_score, b_score] = info[i - 1];
        for (let c = 0; c < m; c++) {
            dp[i][c] = Math.min(dp[i - 1][c] + a_score, dp[i][c]);


            if (c + b_score < m) {
                dp[i][c + b_score] = Math.min(dp[i - 1][c], dp[i][c]);
            }
        }
    }

    let minValue = Infinity;

    dp[info.length].forEach((v) => {
        if (v < n) {
            minValue = Math.min(minValue, v);
        }
    })

    return minValue !== Infinity ? minValue : -1;
}

//이거 동적 기획법 문제니까 헷갈리면 다시 보도록 하자.
//그러니까 모든 경우의 수에 맞는 칸을 집어 넣어 준다고 생각해 보자.
//공간 효율성은 좀 떨어지는 방법일 수 있다.

태그:

카테고리:

업데이트: