ALGORITHM/BOJ
[백준] 2579 계단 오르기
0298
2020. 11. 10. 21:54
2579번: 계단 오르기
계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. <그림 1>과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점
www.acmicpc.net
2020-11-10
import java.util.Scanner;
public class Main2579 {
public static void main(String[] args) throws Exception {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int arr[] = new int[301];
for(int i = 0; i < N; i++) {
arr[i] = sc.nextInt();
}
int dp[][] = new int[301][2];
dp[0][0] = arr[0];
dp[0][1] = arr[0];
dp[1][0] = arr[1] + dp[0][0];
dp[1][1] = arr[1];
for(int i = 2; i < N; i++) {
dp[i][0] = arr[i] + dp[i-1][1];
dp[i][1] = arr[i] + Math.max(dp[i-2][0], dp[i-2][1]);
}
System.out.println(Math.max(dp[N-1][0], dp[N-1][1]));
}
}
1. arr에 각 계단의 점수를 저장해둔다.
2. dp를 2차원 배열로 지정하고 0인 경우는 그 전 계단을 밟은 경우, 1인 경우는 그 전 전 계단을 밟은 경우로 정의했다.
3. 계단 2번 값 부터 점화식으로 계산을 한다.
(1) 현재 계단에서 그 전 계단을 밟는 경우는 현재 계단의 점수 값에 그 전 계단까지 계산한 값을 더한다.
dp[i][0] = arr[i] + dp[i-1][1];
(2) 현재 계단에서 전 전 계단을 밟는 경우는 현재 계단의 점수에 두 계단 전에서 그 전 계단을 밟았는지 아닌지 중에 더 큰 값을 더한다.
4. 마지막 꼭대기에서 그 전 계단을 밟았을 때까지의 총 값과 그 전 전 계단을 밟았을 때까지의 총 값 중 큰 값을 출력한다.