[アルゴリズム]プログラマー-縄張りを奪う
9612 ワード
プログラマー-縄張りを奪う
コードを書くときに知ったのですが、2次元配列であればmax(arr)と書くと、2次元配列で最大の値が出てきます.
説明する
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(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なのかmallなのか、それ以外に、リストを追加してmaxを直接書き込むことができる.Reference
この問題について([アルゴリズム]プログラマー-縄張りを奪う), 我々は、より多くの情報をここで見つけました https://velog.io/@injoon2019/알고리즘-프로그래머스-땅따먹기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol