[Dynamic Programming]개미 전사

2023. 4. 16. 19:47Programmers

728x90

개미 전사는 부족한 식량을 충당하고자 메뚜기 마을의 식량창고를 몰래 공격하려고 한다. 메뚜기 마을에는 여러 개의 식량창고가 있는데 식량창고는 일직선으로 이어져 있다. 각 식량창고에는 정해진 수의 식량을 저장하고 있으며 개미 전사는 식량창고를 선택적으로 약탈하여 식량을 빼앗을 예정이다. 이때 메뚜기 정찰병들은 일직선상 존재하는 식량창고 중 서로 인접한 식량창고가 공격받으면 바로 알아챌 수 있다. 따라서 개미 전사가 정찰병에게 들키지 않고 식량창고를 약탈하기 위해서는 최소한 한 칸 이상 떨어진 식량 창고를 약탈해야 한다.

입력

4
1 3 1 5

출력

8

입력 조건 :  첫째 줄에 식량창고의 개수 N, 둘째 줄에는 공백으로 구분, 각 식량창고에 저장된 식량의 개수 K

출력 조건 : 개미 전사가 얻을 수 있는 식량의 최댓값 출력

 

나의 풀이

n = int(input())
k = list(map(int, input().split())) 

d = [0]*100

d[1] = k[0]
d[2] = max(k[0], k[1])

for i in range(3,n+1):
    d[i] = max(d[i-2] + k[i-1], d[i-1])

print(d[n])

바텀업 방식으로 다이내믹 프로그래밍을 구현하였다.

 

[고려해야 할 조건]

1. (i-1)번째 식량창고를 털기로 결정한 경우 현재의 식량창고를 털 수 없다 

2. (i-2)번째 식량창고를 털기로 결정한 경우 현재의 식량창고를 털 수 있다.

 

(1)과 (2) 중 더 많은 식량을 털 수 있는 경우를 선택하면 된다.

 

728x90

'Programmers' 카테고리의 다른 글

[Algorithm] 여러 정렬 알고리즘  (0) 2023.05.02
[알고리즘] DFS와 BFS  (1) 2023.04.21
둘 만의 암호  (0) 2023.04.16
[재귀 함수] 신나는 함수 실행  (0) 2023.04.07
[재귀 함수] 재귀 함수란 무엇인가요?  (0) 2023.04.07