코딩 테스트 공부

LJM·2023년 8월 7일
0

programmers

목록 보기
48/92

https://school.programmers.co.kr/learn/courses/30/lessons/118668

import java.util.*;

class Solution {
    public int solution(int alp, int cop, int[][] problems) {
        int targeAlp = alp;
        int targetCop = cop;
        for (int[] problem : problems) {
            targeAlp = Math.max(targeAlp, problem[0]);
            targetCop = Math.max(targetCop, problem[1]);
        }

        int[][] dp = new int[targeAlp + 1][targetCop + 1];
        for (int[] row : dp) {
            Arrays.fill(row, Integer.MAX_VALUE);
        }
        dp[alp][cop] = 0;

        for (int i = alp; i <= targeAlp; ++i) {
            for (int j = cop; j <= targetCop; ++j) {
                if (dp[i][j] == Integer.MAX_VALUE) continue;//아직 dp[i][j] 는 탐색되지 않음 dp[i][j]를 기반으로 다음값을 찾을 수 없다

                //공부해서 올리기
                if (i < targeAlp) dp[i + 1][j] = Math.min(dp[i + 1][j], dp[i][j] + 1);
                if (j < targetCop) dp[i][j + 1] = Math.min(dp[i][j + 1], dp[i][j] + 1);

                for (int[] problem : problems) {
                    int areq = problem[0];
                    int creq = problem[1];
                    int arwd = problem[2];
                    int crwd = problem[3];
                    int cost = problem[4];
                    if (i >= areq && j >= creq) {
                        int newAlp = Math.min(i + arwd, targeAlp);
                        int newCop = Math.min(j + crwd, targetCop);
                        dp[newAlp][newCop] = Math.min(dp[newAlp][newCop], dp[i][j] + cost);
                    }
                }
            }
        }

        return dp[targeAlp][targetCop];
    }
}
profile
게임개발자 백엔드개발자

0개의 댓글