➰ 취업준비/알고리즘 문제풀이

[Python][프로그래머스] level 2 - 땅따먹기

 사과개발자 2021. 12. 28. 21:04

문제

 

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

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

programmers.co.kr

풀이과정

연속으로 놓여있는 수는 지날수 없기 때문에 하나의 행에서 선택할 수 있는 수는 가장 큰 수, 두번째로 큰 수로 두가지밖에 없습니다.
그렇게 때문에 아래와 같은 방식으로 최댓값을 구할 수 있습니다.

1. 행에서 가장 큰수 maxNum, 두번째로 큰 수 secondMaxNum 를 구합니다.
2. n-1 행의 maxNum 의 인덱스를 maxIdx, secondMaxNum 의 인덱스를 secondMaxIdx 라고 할때, 
n행에서 maxIdx 와 같은 위치에는 secondMaxNum을, 나머지에는 maxNum을 더합니다.
3. 1행부터 n 행까지 이 과정을 반복합니다.
4. 최종 maxNum 에 저장되어 있는 값이 최종 최댓값입니다.

Code

def solution(land):
    temp = sorted(land[0])
    maxNum = temp[-1]
    secondMaxNum = temp[-2]
    for idx in range(1, len(land)):
        maxIdx = land[idx-1].index(maxNum)
        for jdx in range(4):
            if jdx == maxIdx:
                land[idx][jdx] += secondMaxNum
            else:
                land[idx][jdx] += maxNum
        temp = sorted(land[idx])
        maxNum = temp[-1]
        secondMaxNum = temp[-2]
    return maxNum
반응형