[JS][프로그래머스 -LEVEL 2 - 땅따먹기 ]

정대만·2023년 7월 4일

코딩테스트

목록 보기
13/51
post-thumbnail

제한 사항이 10만 이기 때문에 for 문을 한번씩 써야된다는 것을 알수 있다.

풀이 방식

행 / 열의 개념을 잘 생각해야되는 dp 문제이다.

1행 1 열 2 열 3 열 4 열
2행
3행
4행 .... 이런식으로 밑으로 갈경우 1열 ~ 4열 사이에 가장 큰 수를 구하면 된다.
dp 개념을 이해한다면 금방 풀수 있는 문제이다.

dp는 한 지점을 정하고 여기까지 왔을때의 경우수 중 가장 큰 경우가 무엇일까?
를 생각하면 금방 이해할수 있다. 이문제에서도 math. max 를 구해 가장 큰수를 구한다음 끝까지 온 경우중 가장 큰수를 return 하는 식으로 두었다.


function solution(land) {
    var answer = 0;

    // [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
    for(var i=1; i<land.length; i++){
        //dp 문제임 
        land[i][0]+= Math.max(land[i-1][1],land[i-1][2],land[i-1][3]);
         land[i][1]+= Math.max(land[i-1][0],land[i-1][2],land[i-1][3]);
         land[i][2]+= Math.max(land[i-1][1],land[i-1][0],land[i-1][3]);
         land[i][3]+= Math.max(land[i-1][1],land[i-1][2],land[i-1][0]);
        
    }
    
    return Math.max(land[land.length-1][0],land[land.length-1][1],land[land.length-1][2],land[land.length-1][3] );
}

profile
안녕하세요

0개의 댓글