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번 갱신
'기타 > 코딩테스트' 카테고리의 다른 글
| (코테) 프로그래머스_보석 쇼핑 *윈도우슬라이딩 (4) | 2025.08.19 |
|---|---|
| (코테) 프로그래머스_파괴되지 않은 건물 *dp (2) | 2025.08.09 |
| (코테) 프로그래머스_[3차] 파일명 정렬 (0) | 2025.08.06 |
| (코테) 프로그래머스_기둥과 보 설치 *시물레이션+구현 (3) | 2025.08.02 |
| (코테) 프로그래머스_셔틀버스 *시물레이션 정렬 (3) | 2025.07.30 |