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