def solution(land):
dp = [[0] * len(land[0]) for _ in range(len(land))]
dp[0] = copy.deepcopy(land[0])
for i in range(1, len(land)):
for j in range(len(land[0])):
if j == 0:
dp[i][j] = max(dp[i-1][1:]) + land[i][j]
elif j == len(land[0]) - 1:
dp[i][j] = max(dp[i-1][:j]) + land[i][j]
else:
dp[i][j] = max(max(dp[i-1][:j]), max(dp[i-1][j+1:])) + land[i][j]
return max(max(dp))
그리 어렵지 않은 문제다. 직전 위에 행에서 같은 열이 아닌 값중 가장 큰 값을 더해주면 된다.
코드를 쓰다 알게된 것인데 2차원 배열일때는 max(max(arr))를 써주면 2차원 배열에서 가장 큰 값이 나온다.
def solution(land):
for i in range(1, len(land)):
for j in range(len(land[0])):
land[i][j] = max(land[i -1][: j] + land[i - 1][j + 1:]) + land[i][j]
return max(land[-1])
슬라이싱을 이용할 경우, 슬라이싱 결과가 없을 경우도 있어서 max를 바로 쓰기 곤란했는데, 이 풀이에서는 j가 0이든 마지막꺼이든 그것을 제외한 것들을 더해서 리스트를 만들어줌으로서 max를 바로 쓸 수 있다.