[プログラマー]窃盗/python/ダイナミックプログラミング(DP)
盗みを働く
問題の説明
泥棒はある村を強奪しようとしている.この村のすべての家は下図のように丸く配置されている.
各家には隣接する家と防犯装置が接続されているため、隣接する家を2軒強奪すると警報が鳴る.
どの家にもお金が入った並びのお金がある場合は、泥棒が盗むことができるお金の最高価格を返すために解関数を書いてください.
せいげんじょうけん
解答方法
それぞれ
dp[i] = max(dp[i - 1], dp[i - 2] + money[i])
def solution(money):
n = len(money)
# 첫번째 집을 터는 경우
dp = [0] * n
dp[0] = money[0]
dp[1] = dp[0] # 두번째 집을 털 수 없으므로 그대로 dp[0]
for i in range(2, n - 1):
dp[i] = max(dp[i - 1], dp[i - 2] + money[i])
sum1 = dp[-2] # 첫번째 집을 털었으면, 마지막에서 두번째 집까지 털 수 있음
# 두번째 집을 터는 경우
dp = [0] * n
dp[0] = 0
dp[1] = money[1]
for i in range(2, n):
dp[i] = max(dp[i - 1], dp[i - 2] + money[i])
sum2 = dp[-1] # 두번째 집을 털었으면, 마지막 집까지 털 수 있음
return max(sum1, sum2)
Reference
この問題について([プログラマー]窃盗/python/ダイナミックプログラミング(DP)), 我々は、より多くの情報をここで見つけました https://velog.io/@dhelee/프로그래머스-도둑질-Python-다이나믹-프로그래밍DPテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol