본문 바로가기
프로그래머스/Python

[프로그래머스] 땅따먹기 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트

by 우당탕탕 개발자 2023. 8. 17.
728x90
반응형

 

 

프로그래머스

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

programmers.co.kr

 

1. 문제 설명

2. 풀이과정

해당 문제는 두번째 행부터 계산하여 연속으로 같은 칸을 제외하고 나머지 3칸의 값 중 가장 큰 값과 더하여 새로 저장하는 방식으로 이전의 결과에서 밟을 수 있는 칸 중 가장 큰 값을 가지고 있는 칸을 밟으면 된다.

 

  1. 두번째 행부터 이전의 결과를 참고할 수 있으므로 두번째 행부터 계산을 한다. for i in range(1, len(land))
  2. 현재 행의 첫번째 열로 가려면 이전 행에서 첫번째 열을 제외한 나머지 열 중 하나를 밟으면 된다. 하여 이전 행에서 밟을 수 있는 열 중 가장 큰 값을 더해준다. land[i][0] += max(land[i - 1][1], land[i - 1][2], land[i - 1][3])
  3. 마찬가지로 현재 행의 두번째 열로 가려면 이전 행에서 두번째 열을 제외한 나머지 열 중 하나를 밟으면 된다. 하여 이전 행에서 밟을 수 있는 열 중 가장 큰 값을 더해준다. land[i][1] += max(land[i - 1][0], land[i - 1][2], land[i - 1][3])
  4. 세번째 열도 동일하게 계산한다.  land[i][2] += max(land[i - 1][0], land[i - 1][1], land[i - 1][3])
  5. 마지막 열까지 동일하게 계산한다.  land[i][3] += max(land[i - 1][0], land[i - 1][1], land[i - 1][2])
  6. 마지막 행까지 계산을 했다면 마지막 행에서 최댓값이 정답이다. answer = max(land[-1])
반응형

3. 소스코드

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][0], land[i - 1][1], land[i - 1][3])
        land[i][3] += max(land[i - 1][0], land[i - 1][1], land[i - 1][2])
        
    answer = max(land[-1])
    return answer
728x90
반응형