t_개미전사_220

source github.com/ndb796/python-for-coding-test
type 📌 개발노트
topics 600-알고리즘 & 코딩테스트 603 동적프로그래밍
types 문제풀이

문제

식량창고는 일직선
선택적으로 약탈, 인접한 식량창고가 공격당할시 알 수 있음, 최소한칸떨어저야함
==> 들키지 않고 식량창고를 약탈할때 얻을 수 있는 식량의 최대값

의식적으로 해당 알고리즘을 쓴다고 생각하면 쉽게 나오는 것 같다.
한칸뛰고 붙어있는거 두개를 비교해서 큰거를 적용하면된다. 이렇게 두가지 case가 있다는 것만 인식하면 될 것 같다.
문제의 답안과 풀이가 조금 다르지만 개념자체는 비슷하게 가져간것 같고 답도 맞는 것 같다.

from collections import deque

input = """
4
1 3 1 5
"""

input = input.strip().split('\n')
stor = list(map(int,input[1].split()))
leng = len(stor)
for i in range(2,leng):
    b = i-2
    bb = i-3
    if bb < 0:
        stor[i] += stor[b]
        continue
    stor[i] += max(stor[b],stor[bb])
    print(stor)

print(max(stor[leng-1],stor[leng-2]))