Algorithm/이코테

개미 전사

마닐라 2021. 11. 25. 12:18

 

첫번째와 두번째 식량창고를 털때를 알 수가 있다.

그러면 어떻게 보텀업 방식으로 올라갈 수 있을까 생각해보자

d[0] = 3 d[1] = 1 or 3 중 큰 값으로 둔다.

d[2]는 어떻게되냐면 d[0] + arr[2] 하거나 d[1]만 선택하는게 최댓값이 된다. d[2] = d[0] + arr[2] 가 됐다.

d[3]은 d[1] + arr[3] 하거나 d[2]만 선택하는게 최댓값이 된다. 

여기서 d[0]은 고려 안해도 되는 이유는 이미 d[2]에서 선택된 최댓값이 들어가 있기 때문이다.

 

점화식을 세우면 단순히 d[i] = Math.max(d[i-2]+arr[i], d[i-1]); 이 된다.

 

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner kb = new Scanner(System.in);

        int n = kb.nextInt();
        int[] arr = new int[n];
        for(int i = 0; i < n; i++) arr[i] = kb.nextInt();

        //약탈한 식량을 저장하기위한 dp 테이블
        int[] dp = new int[n];

        dp[0] = arr[0];
        dp[1] = Math.max(arr[0], arr[1]);
        //3번째부터는
        //현재식량을 털어서 2칸 전에 있는 식량을 털거나
        //현재식량을 털지 않아서 1칸전에 있는 식량을 터는 방법을 선택한다.
        for(int i = 2; i < n ; i++) {
            dp[i] = Math.max(dp[i-2] + arr[i], dp[i-1]);
        }
        System.out.println(dp[n-1]);


    }
}

'Algorithm > 이코테' 카테고리의 다른 글

바닥 공사  (0) 2021.11.25
1로 만들기  (0) 2021.11.25
떡볶이 떡 만들기  (0) 2021.11.24
부품 찾기  (0) 2021.11.23
두 배열의 원소 교체  (0) 2021.11.23