프로그래머스
[프로그래머스]땅따먹기
진철
2023. 2. 3. 22:06
728x90
반응형
문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/12913
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
코드를 작성하기 위한 순서는 다음과 같다.
1. 위에서 아래로 내려오면서 가장 큰 합을 구해야하기 때문에 DP를 사용한다.
2. 연속적으로 동일한 열은 구할 수 없기 때문에 같은 열은 제외하여 더해준다.
def solution(land):
answer = 0
for i in range(1, len(land)):
land[i][0]+=max(land[i-1][1], land[i-1][2], land[i-1][3])
land[i][1]+=max(land[i-1][0], land[i-1][2], land[i-1][3])
land[i][2]+=max(land[i-1][1], land[i-1][0], land[i-1][3])
land[i][3]+=max(land[i-1][1], land[i-1][2], land[i-1][0])
answer=max(land[-1])
return answer
초기 코드를 작성할 때는 DP를 사용하지 않았다.
각 열마다 가장 큰 숫자를 구하고 만약 가장 큰 숫자가 연속된 열일 경우, 해당 숫자를 -1로 바꾸고 두번째로 큰 숫자를 구해주었다.
하지만 첫번째 행에서 최댓값을 더해준다고 전체 합이 최대가 되지는 않기 때문에 적절하지 않은 방법이었다.
따라서 순서대로 값을 더해주는 DP 방법을 사용하여 문제를 해결할 수 있었다.
합의 최댓값이나 최솟값을 구하는 문제는 DP를 우선적으로 사용하여야할 듯하다.
728x90
반응형