[๋ฐฑ์ค] ๐ฅ 2579 ๊ณ๋จ ์ค๋ฅด๊ธฐ
๐ ๋์ด๋
๐ฅ Silver 3
๐ ๋ฌธ์
https://www.acmicpc.net/problem/2579
๐ ํ์ด
์โฆ DP๋ฌธ์ ๋ฅผ ํ๋ฉด์ ๋๋์ ์ ์.. ๋ ๊ฑฐ๊ฐ์๋ฐ? ๊ฑฐ์ ํ์๋๋ฐ, ์ ์์๋์งโฆ. ์ ์ถ: 3%์์ ์ค๋ต ์ด๋ฐ ์์ด์๋ค.
์ง๊ด์ ์ผ๋ก ํ๋ ค๋ค๊ฐ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ณ์ฐํ๋ฉด์ ๊ฒ์ก์ ์ ์์ด ์ค๋ฅ๊ฐ ์ปค์ง๊ฒ ๋๋ค.
์ด ๋ฌธ์ ๊ฐ์ ๊ฒฝ์ฐ์๋ ์ฒ์์ class step
๋ฅผ ๋ง๋ค์ด์ ๊ทธ ์์ int current
์ isSkip
, totalStep
์ ๋ณ์๋ฅผ ๋ฃ์ด์ step
ํ์์ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค๊ณ , ์ ์ฃผ์๊ฐ์ isSkip
์ด true
์ด๋ฉด -1, -2
์ totalStep
์ ๋น๊ตํ์ฌ ๋ ํฐ ๊ฐ์ current
๋ฅผ ๋ํ๊ณ , isSkip
์ด false
์ด๋ฉด -2
์ฃผ์๊ฐ์ current
๊ฐ์ ๋ํด์ฃผ์๋ค.
ํ์ง๋ง, ๋์ ํ ์ด ๋ฐฉ๋ฒ์ผ๋ก๋ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์๊ฐ ์์๋ค.
์ด ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ์ ํ๋ฉด์, ์ฅ์ 6์๊ฐ๋์์ด๋ ๊ณ ๋ฏผ์ ํ์๋๋ฐ, ๋์ ํ ์ด๋ป๊ฒ ํด์ผํ ์ง ํ๋๋ ๊ฐ์ด ์กํ์ง๊ฐ ์์๋ค.
๊ทธ๋์ ๋จผ์ ํผ ์ฌ๋์๊ฒ ๋ฌผ์ด๋ณด์๋ค.
์โฆ ์ค๋ช
์ ๋ฃ๋๋ฐ ์ดํด๊ฐ ์ ํ ๋์ง ์์๋ค.
์์์ ์ง์ง ์ด์ฌํ ์ค๋ช
์ ํด์ฃผ๋๋ฐ, ๋จธ๋ฆฌ๋ก๋ ์ ์ ๋ ๊ฒํ๋ฉด ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ฐ๋ฅด๊ฒ ์ง๋ง, ์ด๋ป๊ฒ ์ ๋ฐ ์๊ฐ์ ํ์งโฆ๋ผ๋ ์๊ฐ๋ฐ์ ์๋ค์๋ค.
๊ทธ ๋ฐฉ์์ด๋ ๋ค์๊ณผ ๊ฐ๋ค.
๋ค์๊ณผ ๊ฐ์ด 0์ ์ฃผ์๋ฅผ ๋ฐ๋ ๊ฒฝ์ฐ์ ์๋ 3๊ฐ์ง๊ฐ ์๋ค.
- -3, -1์ ๋ฐ๋ ๊ฒฝ์ฐ
- dp[0] = dp[-3] + arr[-1] + arr[0]
- -3, -2๋ฅผ ๋ฐ๋ ๊ฒฝ์ฐ
- dp[0] = dp[-3] + arr[-2] + arr[0]
- -2๋ง ๋ฐ๋ ๊ฒฝ์ฐ
- dp[0] = dp[-2] + arr[0]
์ด๋ dp์ ๊ฐ์ ํญ์ ์ต๋๊ฐ์ธ๋ฐ, 2๋ฒ์งธ ๋ฐฉ๋ฒ๊ณผ 3๋ฒ์จฐ ๋ฐฉ๋ฒ์ ์๋ ์ฌ์ค์ ํญ์ 2๋ฒ์งธ๊ฐ ๋ ํฐ๊ฐ์ด ๋๋ค.
๋ฐ๋ผ์ 1๋ฒ, 2๋ฒ๊ฐ์ Math.max
์ ์ด์ฉํ์ฌ, ๋ dp[0]์ ์ ์ฅํ๋ฉด, ๋ชจ๋ dp๊ฐ์ ํญ์ ์ต๋๊ฐ ๋๋ค.
๊ณ์ ๋ ธ๋ ฅํ๋ค ๋ณด๋ฉด ์ธ์ ๊ฐ๋ ์ด ๋ฌธ์ ๋ฅผ ๋ณด๋ฉด์ ์ด๋ ๊ฒ ์ฌ์ด๋ฐ, ์ด๊ฑธ ๊ณ ์ํ๋ค๊ณ ? ํ๋ ๋ ์ด ์ค์ง ์์๊น... ๋ฐฑ์ค์ ํ๋ฉด์ ์์ฆ ํญ์ ๋ถ์กฑํ๋ค๊ณ ๋๋ผ๊ฒ ๋๋ค.
๐ Code
package DP;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class N2579 {
static int[] dp;
static int[] arr;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int target = Integer.parseInt(st.nextToken());
arr = new int[target];
dp = new int[target];
for (int i = 0; i < target; i++) {
st = new StringTokenizer(br.readLine());
arr[i] = Integer.parseInt(st.nextToken());
}
dp[0] = arr[0];
if (target > 1) {
dp[1] = arr[1] + arr[0];
}
if (target > 2) {
dp[2] = Math.max(arr[0] + arr[2], arr[1] + arr[2]);
}
for (int i = 3; i < target; i++) {
MakeMax(i);
}
System.out.println(dp[target - 1]);
}
public static void MakeMax(int index) {
dp[index] = Math.max(dp[index - 3] + arr[index - 1], dp[index - 2]) + arr[index];
}
}
package (์ด๋ฆ); ๋ฅผ ๋๊ณ , class ์ด๋ฆ์ Main
์ผ๋ก ๋ณ๊ฒฝํ๋ฉด ๋๋ค.
๊ฐ์ธ ๊ณต๋ถ ๊ธฐ๋ก์ฉ ๋ธ๋ก๊ทธ์
๋๋ค.
ํ๋ฆฌ๊ฑฐ๋ ์ค๋ฅ๊ฐ ์์ ๊ฒฝ์ฐ ์ ๋ณดํด์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.๐