[Programmers]-땅따먹기

문제

문제

코드

class Solution {
    int solution(int[][] land) {
        int answer = 0;

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

        answer = memoization(memo, land);

        return answer;
    }



    public int memoization(int[][] memo, int[][] land){
        int x = memo[0].length;
        int y = memo.length;
        for(int i=0;i<x;i++){//마지막줄
            memo[y-1][i]=land[y-1][i];
        }

        int max = 0;

        for(int i = y-2; i>=0;i--){//1,0
            for(int j=0;j<x;j++){//0,1,2,3
                max = 0;
                for(int k=0;k<x;k++){//0,1,2,3
                    if(j==k) continue;
                    if(max<memo[i+1][k]) max = memo[i+1][k];

                }
                memo[i][j] = max + land[i][j];
            }
        }
        for(int i=0;i<x;i++){//첫줄
            if(max<memo[0][i]) max = memo[0][i];
        }
        return max;
    }

}

코드 설명

맨아랫줄 에서 위로올라간다.

최대값을 저장하고 같은 열을 연속해 못밟게 조건을 준다.

그리고 아래행에서 최대값을 가져와서.

메모제이션 배열 = 최대값 + 현재 자리 점수 이다.

아래에서 위로 올라왔으니 맨윗줄에는 최대값을 찾아 최대값을 반환한다.

요약

자랑

  • 메모이제이션을 이용하여 데이터를 저장해 놓는다.
  • 10점 받아서 기분좋네.