본문 바로가기
알고리즘

[DP] 땅따먹기

by limew 2023. 8. 31.

https://school.programmers.co.kr/learn/courses/30/lessons/12913

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

의문점

한 열에 반복된 숫자는 없는지?

로직

1행에서 1칸만 선택한다

연속 같은 열은 선택할 수 없다

 

두번째 항부터 for을 돌린다.

전의 항의 가장 큰수, 그 수의 인덱스, 두번째 큰수를 구한다.

현재항마다 가장 큰수를 더하는데, 현재의 열이 그 전항 가장큰수의 열과 같을때는 두번쨰 큰수를 더한다.

이렇게 반복해서 마지막 항까지 내려온다

 

function solution(land) {
    for (let i = 1; i < land.length; i++) {
        const sortedLand = [...land[i-1]].sort((a, b) => b-a);
        const prevMax = sortedLand[0];
        const prevSecondMax = sortedLand[1]; 
        const prevMaxIndex = land[i-1].indexOf(prevMax);
        
        for (let j = 0; j < land[0].length; j++) {
            if (j !== prevMaxIndex) {
                land[i][j] += prevMax;
            } else {
                land[i][j] += prevSecondMax;
            }
        }
    } 
    console.log(land); // [ [ 1, 2, 3, 5 ], [ 10, 11, 12, 11 ], [ 16, 15, 13, 13 ] ]
    return land[land.length-1].sort((a, b) => b-a)[0];
}

'알고리즘' 카테고리의 다른 글

[DP] 등굣길  (0) 2023.09.01
[DP] 스티커 모으기(2), 도둑질  (0) 2023.09.01
[DP] 정수 삼각형  (0) 2023.08.31
[DP] 가장 큰 정사각형 찾기  (0) 2023.08.31
[Hash] 주차 요금 계산  (0) 2023.08.31