๋ฌธ์
ํด๋น ํฌ์คํ ์ ๋ฐฑ์ค์ 2547๋ฒ ๊ณ๋จ ์ค๋ฅด๊ธฐ ์ ์ ๊ทผ๊ณผ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ค๋ช ํ ๊ธ ์ ๋๋ค.
์ ๋ต ์์ค ์ฝ๋๋ฅผ ํ์ธํ์๋ ค๋ฉด solve url ์์ ํ์ธ ๊ฐ๋ฅํฉ๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ด๋ค ๋ฐฉ์์ผ๋ก ์ ๊ทผํด์ผ ํ๋์ง๋ฅผ ๋จผ์ ์๊ฐํด๋ณด์.
ํด๊ฒฐ๋ฒ
์ด ๋ฌธ์ ๋ ํฌ๋์ฃผ ์์ ๋ฌธ์ ์ ์ ๋ฒ ์ ์ฌํ ๋ฌธ์ ์ด๋ค.
ํ์ง๋ง ์ ๋ต ๋น์จ์ด 35 %๋ ๋๋๋ฐ, ๊ทธ๊ฑด ๊ฐ๊ณผํ ์ ์๋ ์กฐ๊ฑด์ด ํ๋ ์์ด์ ์ด๋ค.
์์ธํ ๊ฒ์ ์๋์์ ์ค๋ช
ํ๊ฒ ๋ค.
์ ๊ทผ๋ฒ
์ฌ๊ธฐ์ ์ถ๋ ฅ์ธ ๊ณ๋จ ์ ์์ ์ต๋๊ฐ์ ๋ฌด์กฐ๊ฑด ๋ง์ง๋ง ๊ณ๋จ์์ ๋ฐ์ํด์ผ ํ๋ค.
๊ทธ๋ผ ๋ง์ง๋ง ๊ณ๋จ์ ๊ผญ ๋ฐ์์ผ ํ๋ค๋ ์๋ฆฌ์ด๋ค.
๊ทธ๋ผ ๋ง์ง๋ง ๊ณ๋จ์ ๊ผญ ๋ฐ์ ๊ฒฝ์ฐ๋ ๋ช๊ฐ์ง ์ผ๊น?
n ๊ฐ์ ๊ณ๋จ์ด ์์ ๋, ๋ง์ง๋ง ๊ณ๋จ์ ๊ผญ ๋ฐ์ ๊ฒฝ์ฐ 2๊ฐ์ง๋ฅผ ์๊ฐํด๋ณด์.
- n-1๋ฒ์งธ ๊ณ๋จ์ ๋ฐ๊ณ ์ค๋ ๊ฒฝ์ฐ
- n-2๋ฒ์งธ ๊ณ๋จ์ ๋ฐ๊ณ ์ค๋ ๊ฒฝ์ฐ
n-1๋ฒ์งธ ๊ณ๋จ์ ๋ฐ๊ณ ์ค๋ ๊ฒฝ์ฐ
์ด ๊ฒฝ์ฐ๋ n-2๋ฒ์งธ ๊ณ๋จ์ ๊ฑด๋ ๋ฐ๊ณ ์ค๋ ๊ฒฝ์ฐ์ฌ์ผ ํ๋ค.
๊ทธ๋ ์ง ์์ผ๋ฉด 3๊ฐ์ ๊ณ๋จ์ ์ฐ์์ ์ผ๋ก ๋ฐ๊ณ ์ค๋ ๊ฒ์ด ๋๋ฏ๋ก n-3, n-1, n ์ด ๋์ด์ผ ํ๋ค.
๋ง์ง๋ง ๊ณ๋จ + ์ ์ ๊ณ๋จ์ ์ต๋๊ฐ
n-2๋ฒ์งธ ๊ณ๋จ์ ๋ฐ๊ณ ์ค๋ ๊ฒฝ์ฐ
์ด ๊ฒฝ์ฐ๋ n-1๋ฒ์งธ ๊ณ๋จ์ ๋ฐ์ง ์๋ ๊ฒฝ์ฐ์ด๋ค.
๊ทธ๋ผ n-2๋ฒ์งธ ๊ณ๋จ์์ ๋ฐ๋ก n๋ฒ ๊ณ๋จ์ผ๋ก ๊ฐ๋ ๊ฒฝ์ฐ์ธ ๊ฒ์ด๋ค.
์ ์ ๊ณ๋จ์ ์ต๋๊ฐ
์ด ๋ ๊ฒฝ์ฐ์ ์ต๋๋ฅผ ํ์ฌ ๋ฐ๊ณ ์๋ ๊ณ๋จ์ ์ต๋๋ก ์ง์ ํด์ฃผ๋ฉด ๋๋ค.
์ค๋ต ํ๋ณด
ํด๋น ๋ฌธ์ ์ ์ ๋ต๋ฅ ์ด 35%์ธ ๊ฐ์ฅ ํฐ ์ด์ ๋ ๋ฐ๋ก ์ฒซ ๋ฒ์งธ ๊ณ๋จ์ด๋ค.
๋ฌธ์ ์์๋ ์ฒซ ๋ฒ์งธ ๊ณ๋จ์ ๋ฌด์กฐ๊ฑด ๋ฐ์ผ๋ผ๋ ์ด์ผ๊ธฐ๊ฐ ์๋ค.
ํ์ง๋ง ์ฒซ ๋ฒ์งธ ๊ณ๋จ์ ๋ฐ์ผ๋ฉด ๋ฌด์กฐ๊ฑด ์ด๋์ฒ๋ผ ๋๊ปด์ง๋ค.
์? ์์์ ์ ๊ณ๋จ์ ํฌํจ๋์ง ์๋๋ค๊ณ ํ์ผ๋๊น.
๊ทผ๋ฐ ์ค์ํ๊ฑด ์์์ ์ด ๊ณ๋จ์ด ์๋๋ผ๋ ๊ฒ์ด์ง ์ฒซ ๋ฒ์งธ ๊ณ๋จ์ ์นด์ดํ
ํ์ง ์๊ฒ ๋ค๋ ์๋ฆฌ๋ ์๋๋ค.
๊ทธ๋์ ๊ฒฐ๊ตญ ์ฒซ ๋ฒ์งธ ๊ณ๋จ์ ๋ฐ์ง ์๋ ๊ฒฝ์ฐ๊ฐ ์ด๋์ผ ์ ์๋ค.
arr = { 1, 100, 200, 300} ๋ง ๋ด๋ arr = { 1, 100, 200, 300} ์ธ๊ฒ ํ์คํ ์ด๋์ด๋ค
์ ๋ต ์ฝ๋
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(br.readLine());
int[] arr = new int[301];
int[] dp = new int[301];
for (int i = 0; i < n; i++) {
arr[i] = Integer.parseInt(br.readLine());
}
dp[0] = arr[0];
dp[1] = Math.max(arr[1], arr[0] + arr[1]);
dp[2] = Math.max(arr[1] + arr[2], arr[0] + arr[2]);
for (int i = 3; i < n; i++) {
dp[i] = Math.max(dp[i-3] + arr[i-1], dp[i-2]) + arr[i];
}
bw.write(String.valueOf(dp[n-1]));
bw.flush();
bw.close();
}
}
๋ฌธ์ ํ๊ณ
์ด๋ฒ ๋ฌธ์ ๋ ๋ฌด์กฐ๊ฑด ์ฒซ ๋ฒ์งธ ๊ณ๋จ์ ๋ฐ๋๊ฒ ์ด๋์ด๊ฒ ์ง ํ๋ ๋ถ์กฑํ ์ฌ๊ณ ๋ก 5๋ฒ์ด๋ ํ๋ ธ์๋ค.
์ ํ์ ๋์ถ ์์ฒด๋ ์ด๋ ต์ง ์์ผ๋ ์ ์ ๋ต๋ฅ ์ด ๋ฎ์์ง ์ ์ ์๋ ๋ฌธ์
๋๊ธ