기타/코딩테스트

(코테) 프로그래머스_땅따먹기 * DP

불광동 물주먹 2025. 8. 7. 13:50

 

 

 

 

1. 내가 처음 제시한 dp 정답 

class Solution {
    int solution(int[][] land) {
        int answer = 0;
        
        for(int i=1;i<land.length;i++){
            for(int j=0;j<4;j++){
                int origin = land[i][j];                
                int ref=0;
                for(int z=0;z<4;z++){
                    if(z==j) continue;  
                    if(land[i][j] < land[i-1][z]+origin) {
                        land[i][j]=land[i-1][z]+origin;
                    }                    
                }                                
            }
        }
        int max=0;
        for(int next:land[land.length-1]){
            max = Math.max(max,next);
        }        
        return max;
    }
}

 

 

 

2. 지피티가 리팩토링해준 클린코드

 

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

        for (int i = 1; i < land.length; i++) {
            for (int j = 0; j < 4; j++) {
                int origin = land[i][j];
                int maxPrev = 0;

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

                land[i][j] = origin + maxPrev;
            }
        }

        // 마지막 행에서 최대값 찾기
        for (int next : land[land.length - 1]) {
            answer = Math.max(answer, next);
        }

        return answer;
    }
}

 

 

 

 

회고.

내가 한 답도 논리적으로 정답은 맞다.

그러나 지피티가 클린코드를 해준 부분은 아래와 같다

                int maxPrev = 0;  -> max변수 선언

                for (int z = 0; z < 4; z++) {
                    if (z == j) continue;
                    maxPrev = Math.max(maxPrev, land[i - 1][z]);  //max값 갱신
                }

                land[i][j] = origin + maxPrev;   //for문 후 원본 데이터 갱신
            }

 

내 코드와 차이는  

나 :  원본데이터 값을 변수에 저장해 둔 후   원본 배열에 값과 추가시킬 값을 연산 후  원본 배열에 계속 갱신하는 방식.

지피티 : max 값을 변수 선언해 원본데이터 값은 나두고 이전 행에 가장 큰 값을 갱신시켜, 반복문이 끝난 후 원본데이터에 추가시켜 원본데이터 갱신

 

 

차이는 나는 반복문에서 원본데이터를 계쏙 갱신시킴 , 지피티는 원본데이터는 건들지 않고 이전행에  max값만 구해서 마지막에 원본데이터+max값 연산후 원본데이터 갱신 

나 - 원본데이터 최대 4번 갱신 

지피티 - 원본데이터 최대 1번 갱신