땅따먹기

문제

etc-image-0


문제 풀이

처음에는 예시를 보고 같은 열에 있지 않고 높은 수만 골라서 가면 되지 않나 싶어서 2중 배열로 맥스값을 찾으면 넘어 가는 방식으로 처리 했다가 테스트에서 모두 틀리는 현상을 얻어 맞았다. 

 

문제를 잘 못 이해 한 듯 해서 질문게시판으로 가니 역시나 문제 자체를 잘 못 이해하고 있었다. 

아래 2행짜리가 있다고 보자. 여기서 어떤 방법이 가장 높은 점수를 얻는 루트인가 보면 4 -> 20을 밟았을때가 최고점이다. 

 

{1, 2, 3, 4, 5}

{1, 1, 1, 1, 20}

 

이러한 방식으로 dp 로 처리한 문제이다. 


나의 답안

int[][] dp = new int[land.length][land[0].length];

dp[0] = land[0].clone();

for (int i = 1; i < land.length; i++) {
    for (int j = 0; j < land[0].length; j++) {
        for (int k = 0; k < land[0].length; k++) {
            if (j == k) continue;
            dp[i][j] = Math.max(dp[i][j], dp[i - 1][k] + land[i][j]);
        }
    }
}

return Arrays.stream(dp[land.length-1]).max().orElse(0);

 

'Programmers 문제풀이 > Lv.2' 카테고리의 다른 글

소수 찾기  (0) 2023.04.05
모음사전  (0) 2023.04.05
주식 가격  (0) 2023.04.05
오픈채팅방  (0) 2023.04.05
주차 요금 관리  (0) 2023.04.04