๊ณ๋จ ์ค๋ฅด๊ธฐ ๋ฌธ์ ๋ 2156 ํฌ๋์ฃผ ์์๊ณผ ๋น์ทํ ๋ฌธ์ ๋ผ๊ณ ๋ณผ ์ ์๋ค. ์ด์ฉ๋ฉด ๋ ์ฌ์ด ๋ฌธ์ ์ด๋ค.
ํฌ๋์ฃผ ์์ ๋ฌธ์ ์ ๊ฒฝ์ฐ ๋ง์ง๋ง ์์ ๊ผญ ๋ง์ ์ผ ํ๋ค๋ ์กฐ๊ฑด์ ์์ง๋ง, ๊ณ๋จ์ค๋ฅด๊ธฐ ๋ฌธ์ ๋ ๋ง์ง๋ง ๊ณ๋จ์ ๊ผญ ๋ฐ์์ผ ํ๋ค๋ ์กฐ๊ฑด์ด ์๋ค.
dp๋ฐฐ์ด์ ๊ฐ ๊ณ๋จ ์์น์ ์ฌ๋์ ๋, ์ป์ ์ ์๋ ์ ์์ ์ต๋๊ฐ์ ๊ธฐ๋กํ ๊ฒ์ด๋ค.
๋ง์ง๋ง ๊ณ๋จ์ ๊ผญ ๋ฐ์์ผ ํ๋ค๋ ์กฐ๊ฑด ๋๋ฌธ์, dp[i]๊ฐ์๋ array[i]๊ฐ์ ๋ฌด์กฐ๊ฑด ํฌํจ์ด ๋์ด์ผ ํ๋ฏ๋ก, ํฌ๋์ฃผ ์์ ๋ฌธ์ ์์ ์ธ์ ๋ ์กฐ๊ฑด ์ค Case2 ์ Case3 ๋ง ๊ณ ๋ คํด์ ๋ ์ค์ ์ต๋๊ฐ์ ๊ธฐ๋กํ๋ฉด ๋๋ค.
์ฆ (dp[i-3] + array[i-1] +array[i]) ์ (dp[i-2]+array[i]) ๋ ์ค์ ํฐ ๊ฐ์ dp[i] ๊ฐ์ผ๋ก ์ ๋ฐ์ดํธ ํ๋ฉด ๋๋ค!
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.valueOf(br.readLine());
int[] dp = new int[N + 2];
int[] array = new int[N + 2];
for (int i = 1; i <= N; i++) {
array[i] = Integer.valueOf(br.readLine());
}
dp[1] = array[1];
dp[2] = array[1] + array[2];
for (int i = 3; i <= N; i++) {
dp[i] = Math.max(dp[i - 3] + array[i - 1] + array[i], dp[i - 2] + array[i]);
}
// System.out.println(Arrays.toString(array));
// System.out.println(Arrays.toString(dp));
System.out.println(dp[N]);
}
}