본문 바로가기
공부-코딩테스트/코테풀이 - 자바, 파이썬

땅따먹기 파이썬 (프로그래머스)

by 령과 2021. 12. 27.

문제 설명은 아래 링크를 통해서

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

 

코딩테스트 연습 - 땅따먹기

땅따먹기 게임을 하려고 합니다. 땅따먹기 게임의 땅(land)은 총 N행 4열로 이루어져 있고, 모든 칸에는 점수가 쓰여 있습니다. 1행부터 땅을 밟으며 한 행씩 내려올 때, 각 행의 4칸 중 한 칸만 밟

programmers.co.kr

 

풀이방법

n번째 행에 있는 4가지 점수들 입장에서 생각해보자

(15)점수가 선택될 경우는 1번행의 1,3,4번째 점수를 밟고 넘어온 경우다.

다른 점수들도 마찬가지로 이전 점수들 중에서 자신의 열을 제외한 나머지 점수들 중에서 가장 큰 점수를 가진 점수를 선택하면 자신이 선택된 경우의 수에서 가장 큰 점수를 얻을 수 있게 되는 것이다.

 

이전 행이 만약 여태 건너온 점수들의 합산을 나타낸다면 제일 마지막 행의 점수는 자신이 선택된 경우 가장 큰 점수를 나타내게 된다.

 

두번째 행은 첫번째 행에서 자신 열에 위치한 점수를 제외한 나머지 점수 중에서 가장 큰 값을 선택하여 자신과 더한다.

이렇게 행이 누적되는 식으로 점수를 더하고 마지막 행에서 가장 큰 값을 선택하면 정답이 된다.

def solution(land):
    for i in range(1,len(land)):
        for j in range(len(land[i])):
            land[i][j]+=max(land[i-1][:j]+land[i-1][j+1:])
    
    
    #확인용
    for i in land:
        print(i)
        
    
    return max(land[-1])

 

느낀점

1.나 설명 진짜 못한다.......

2.다른 사람 코드를 봤는데 놀랄만큼 똑같더라....

  BFS, DFS등 알고는 있지만 코테를 위해 각잡고 공부하지 않아서 오히려 단순히 문제 접근을 하다보니 답을 찾았다.

댓글