๋ณธ ๋ฌธ์ ๋ ๋์ ๊ณํ๋ฒ(DynamicPrograming)์ ์ด์ฉํ์ฌ ํ์ด์ผ ํ๋ค. ๋ณต์กํ ๋ฌธ์ ๋ฅผ ๊ฐ๋จํ ์ฌ๋ฌ๊ฐ๋ก ๋๋์ด์ ํด๊ฒฐํ๋ ๊ธฐ๋ฒ์ ๋๋ค. ๊ทธ๋ฐ ์ด์ ๋ก ํจํด(๊ท์น)์ ์ฐพ์ ๋ฐฐ์ด์์ ์ด๊ธฐ๊ฐ์ ํ ๋นํ๊ณ , for๋ฌธ์ ๋๋ฆฌ๋ bottom-up ๋ฐฉ์์ด๋ ์ฌ๊ท๋ฅผ ์ด์ฉํ๋ top-down ๋ฐฉ์์ด ์์ต๋๋ค.
https://www.acmicpc.net/problem/2579
2579๋ฒ: ๊ณ๋จ ์ค๋ฅด๊ธฐ
๊ณ๋จ ์ค๋ฅด๊ธฐ ๊ฒ์์ ๊ณ๋จ ์๋ ์์์ ๋ถํฐ ๊ณ๋จ ๊ผญ๋๊ธฐ์ ์์นํ ๋์ฐฉ์ ๊น์ง ๊ฐ๋ ๊ฒ์์ด๋ค. <๊ทธ๋ฆผ 1>๊ณผ ๊ฐ์ด ๊ฐ๊ฐ์ ๊ณ๋จ์๋ ์ผ์ ํ ์ ์๊ฐ ์ฐ์ฌ ์๋๋ฐ ๊ณ๋จ์ ๋ฐ์ผ๋ฉด ๊ทธ ๊ณ๋จ์ ์ฐ์ฌ ์๋ ์
www.acmicpc.net
์ ๋ bottom-up์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ด์ ์ฉ๋๋ก ๋ฐฐ์ด์ ์ ํํ์ต๋๋ค. ์ฌ์ฉ์์ ์ ๋ ฅํฌ๊ธฐ ๋งํผ์ ๋ฐฐ์ด์ ์์ฑํ๊ณ , ์ด๊ธฐ๊ฐ์ ๋ฃ์์ต๋๋ค.
์ดํ์ ๊ณ ๋ฏผ์ ํ๋๊ฒ for๋ฌธ์ ํตํด ๊ฐ์ ๋ํด๋๊ฐ์ผ ํ๋๋ฐ ๊ทธ ๋ถ๋ถ์ ์ด๋ป๊ฒ ๊ตฌ์ํ๋๋ ๊ฒ์ด์์ต๋๋ค. ๊ฐ๋ น, dp[4] ์ฆ ๊ณ๋จ 4๊น์ง์ ์ต๋๊ฐ์ ๊ตฌํ๋ค๋ฉด ๊ณ๋จ ๋ณ๋ก 1, 2, 4 ํน์ 1, 3, 4๋ฅผ ๋น๊ตํด์ผ ํ ๊ฒ์ ๋๋ค. ์ผ๋ฐ์ ์ธ ๊ฒฝ์ฐ๋ n>=3 ์ด์์ผ ๋ ์ด๋ฏ๋ก for๋ฌธ์ ์ด๊ธฐ๊ฐ์ 3์ด๋ฉด ๋์ต๋๋ค.
์ ๊ฐ ์ด ๋ถ๋ถ์ ์ ๋๋ก ํ์ง ๋ชปํ๋ ์ด์ ๋ dp[] ๋ผ๋ ํ๋์ ๋ฐฐ์ด์ ๋์ ์ผ๋ก ๋ํด๋๊ฐ๋ ค๊ณ ํ ๊ฒ์ ์์ต๋๋ค. ์ด ๊ณ๋จ ๋ฌธ์ ๊ฐ์ ๊ฒฝ์ฐ๋ ์ฐ์ 3๊ฐ์ ๊ณ๋จ์ ๋ฐ์ง ๋ชปํ๋ค ๋ผ๋ ์กฐ๊ฑด์ด ์๊ธฐ ๋๋ฌธ์ ๊ทธ๋ฐ์์ผ๋ก ์ฝ๋ฉ์ ํ๋ฉด ๋ฐฉ๋ฒ์ด ์์์ต๋๋ค.
๋ฐ๋ผ์ ๋ฐฐ์ด์ 2๊ฐ ๊ตฌ์ฑํด์ผ ํ์ต๋๋ค. ํ๋์ ๋ฐฐ์ด์ ๋์ ๊ฐ, ํ๋์ ๋ฐฐ์ด์ ๊ณ๋จ์ ์ ์๊ฐ ์์ด์ผ ํฉ๋๋ค.
์ฐ์๋ 3๊ณ๋จ์ ๋ฐ์ง ๋ชปํ๋ค๋ฉด 2๊ฐ์ง์ ๊ฒฝ์ฐ๋ฅผ ๊ณ ๋ คํ ์ ์์ต๋๋ค. 2์นธ ์ฌ๋์ ๋, ๋ชฉ์ ์ง์ธ ๊ฒฝ์ฐ์ 1์นธ ์ฌ๋์ ๋, ๋ชฉ์ ์ง์ธ ๊ฒฝ์ฐ์ ๋๋ค. 1๋ฒ๊ฐ์ ๊ฒฝ์ฐ๋ ๋ฐ๋ก ๋น์ฐํ ์ฌ๋ผ๊ฐ๊ธฐ ์ ๊ณ๋จ์์ 2์นธ ๋จ์ด์ง ๊ณ๋จ์ ๋์ ์ ์+ํ์ฌ๊ณ๋จ+๋ชฉ์ ์ง ์ ์๋ฅผ ํฉํด์ผํ๊ณ , 2๋ฒ ๊ฐ์ ๊ฒฝ์ฐ๋ ์ฌ๋ผ๊ฐ๊ธฐ ์ ๊ณ๋จ์ ๋์ ํฉ๊ณผ ๋ชฉ์ ์ง์ ์ ์๋ฅผ ํฉํด์ผ ํฉ๋๋ค.
๊ณ๋จ 1๊ณผ ๊ณ๋จ 2๋ ๋ฐฐ์ด์ ๊ฐ์ ๋ฃ๊ณ , for๋ฌธ์ ์ด์ฉํฉ๋๋ค.
package dynamicPrograming6;
import java.io.*;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main {
static int dp[];
static int stairs[];
static int n;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
n = Integer.parseInt(br.readLine());
stairs = new int[n+1];
dp = new int[n+1];
for(int i=1; i<=n; i++) {
stairs[i] = Integer.parseInt(br.readLine());
}
dp[1] = stairs[1];
if(n>=2) { //์ด๋ฐ ์ค๋ฅ ๋ฐฉ์ง
dp[2] = stairs[1] + stairs[2]; // ๊ณ๋จ 2์ ๋์ ํฉ
}
for(int i=3; i<=n; i++) {
dp[i] = Math.max(stairs[i] + dp[i-2], stairs[i-1]+ stairs[i] + dp[i-3]); //dp๋ ๋์ ํฉ, stairs๋ ๊ณ๋จ์ ์ ์
}
bw.write(String.valueOf(dp[n])+"\n");
bw.flush();
br.close();
bw.close();
}
}
'์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํฐ ์์ ๋ง์ (0) | 2021.06.09 |
---|---|
[์๊ณ ๋ฆฌ์ฆ] DFS, BFS์ ๊ตฌํ (0) | 2020.10.13 |
10816 ์ซ์ ์นด๋ 2 (0) | 2020.08.05 |
1051๋ฒ: ์ซ์ ์ ์ฌ๊ฐํ (0) | 2020.08.05 |
๋ฐฑ์ค 1012 ์ ๊ธฐ๋ ๋ฐฐ์ถ (์๋ฐ) (0) | 2020.07.27 |