반응형
DP.........
dp 문제
풀이
1. oox, oxo, xoo 의 경우가 존재한다.
1-2. oox 의 경우 dp[i-1] 가 된다.
1-3. oxo 의 경우 dp[i-2] + arr[i] 가 된다.
1-4. xoo 의 경우 do[i-3] + arr[i-1] + arr[i] 가 된다.
2. 위의 3경우중 가장 큰 값을 선택하면 된다.
dp[i] = Math.max(dp[i - 1], Math.max(dp[i - 2] + arr[i], dp[i - 3] + arr[i - 1] + arr[i])) 라는 수식이 나온다.
3. 끝.
4. 아 여기서 N=1 일때와 2일때가 존재한다. 이때의 경우를 조건을 통해 잘 계산하도록 한다.
소스
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | import java.io.BufferedReader; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int N = Integer.parseInt(br.readLine()); int[] arr = new int[N]; int[] dp = new int[N]; for (int i = 0; i < N; i++) { arr[i] = Integer.parseInt(br.readLine()); } // 첫잔일 경우 if (N >= 1) { dp[0] = arr[0]; } // 두잔일 경우 if (N >= 2) { dp[1] = arr[0] + arr[1]; } // 세잔일 경우 if (N >= 3) { dp[2] = Math.max(dp[1], Math.max(dp[0] + arr[2], arr[1] + arr[2])); } for (int i = 3; i < N; i++) { dp[i] = Math.max(dp[i - 1], Math.max(dp[i - 2] + arr[i], dp[i - 3] + arr[i - 1] + arr[i])); } System.out.println(dp[N - 1]); } } | cs |
반응형
'나는요 공부가 좋....은걸... > 알고리즈음' 카테고리의 다른 글
[BOJ] 백준 2210 - 숫자판 점프 (자바) (0) | 2018.02.20 |
---|---|
[BOJ] 백준 1049 - 기타줄 (자바) (0) | 2018.02.20 |
[BOJ] 백준 2910 - 빈도 정렬 (자바) (0) | 2018.02.20 |
[BOJ] 백준 7576 - 토마토 (자바) (0) | 2018.02.20 |
[BOJ] 백준 14503 - 로봇청소기 (자바) (0) | 2018.02.20 |