https://www.acmicpc.net/problem/2579
2579번: 계단 오르기
계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. <그림 1>과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점
www.acmicpc.net
문제
풀이
포도주시식 문제랑 비슷하다. 단 , 종결 조건이 정해져있다.
만약 n번째 계단을 갔다고 가정하면 갈 수 있는 경우의 수는 두 가지다.
dp[i] 를 i번째 계단까지 갔을 때 , 얻을 수 있는 점수의 총 합이라고 가정하자.
1. 직전 계단을 밟는경우 연속 3번 계단을 건널 수 없으니 => dp[n] = dp[n-3] + n-1계단점수 + n계단 점수
2. 한칸 건너 뛰어 오는 경우 => dp[n] = dp[n-2] + n번째 계단 점수
이 둘 중에 큰 값이 되므로 최종 점화식은
dp[i] = Math.max(dp[i-2]+arr[i],dp[i-3]+arr[i]+arr[i-1]);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
import java.io.*;
public class Main{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int[] arr = new int[n+1];
int[] dp = new int[n+1];
for(int i=1;i<=n;i++)
arr[i] = Integer.parseInt(br.readLine());
dp[1] = arr[1];
if(n==1){
System.out.println(dp[1]); //크기가 1일경우 종료
return;
}
dp[2] = arr[1]+arr[2];
for(int i=3;i<=n;i++)
dp[i] = Math.max(dp[i-2]+arr[i],dp[i-3]+arr[i]+arr[i-1]);
System.out.println(dp[n]);
}
}
|
cs |
'알고리즘,PS > 백준' 카테고리의 다른 글
[BOJ] 백준 [1932] 정수 삼각형 JAVA (0) | 2021.09.17 |
---|---|
[BOJ] 백준 [1149] RGB거리 JAVA (0) | 2021.09.16 |
[BOJ] 백준 [2156] 포도주 시식 JAVA (0) | 2021.09.15 |
[BOJ] 백준 [1463,12852] 1로 만들기 1,2 JAVA (0) | 2021.09.14 |
[BOJ] 백준 [1946] 신입사원 JAVA (0) | 2021.09.13 |