import java.util.*;
import java.lang.*;
import java.io.*;
class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
boolean[] isSeq = new boolean[N+1];
int[] stairs = new int[N+1];
int[][] stairsCum = new int[N+1][2];
// stairsCum[n][0] = 이전 계단 포함
// stairsCum[n][1] = 이전 계단 스킵
stairs[0]=0;
for(int i=1; i<stairs.length; i++){
stairs[i]=Integer.parseInt(br.readLine());
stairsCum[i][0]=0;
stairsCum[i][1]=0;
}
stairsCum[1][0] = stairs[1];
stairsCum[1][1] = stairs[1];
for(int i=2; i<stairsCum.length; i++){
stairsCum[i][0] = stairsCum[i-1][1] + stairs[i];
stairsCum[i][1] += stairsCum[i-2][1]>stairsCum[i-2][0]?stairsCum[i-2][1]:stairsCum[i-2][0];
stairsCum[i][1] += stairs[i];
}
int answer = stairsCum[N][1]>stairsCum[N][0]?stairsCum[N][1]:stairsCum[N][0];
System.out.println(answer);
}
}
boolean[] isSeq = new boolean[N+1]; // 선언만 하고 미사용
for(int i=1; i<stairs.length; i++){
stairs[i]=Integer.parseInt(br.readLine());
stairsCum[i][0]=0; // 배열은 기본값이 0
stairsCum[i][1]=0; // 불필요한 초기화
}
N=1일 때 stairsCum[2] 접근하면 IndexOutOfBoundsException 위험
import java.io.*;
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[] stairs = new int[N+1];
int[][] dp = new int[N+1][2];
// dp[i][0] = i번째 계단을 한 칸으로 올라옴 (i-1 밟음)
// dp[i][1] = i번째 계단을 두 칸으로 올라옴 (i-1 안 밟음)
for(int i=1; i<=N; i++){
stairs[i] = Integer.parseInt(br.readLine());
}
dp[1][0] = stairs[1];
dp[1][1] = stairs[1];
for(int i=2; i<=N; i++){
// 한 칸 올라옴 = 직전은 반드시 두 칸으로 올라온 경우
dp[i][0] = dp[i-1][1] + stairs[i];
// 두 칸 올라옴 = i-2의 최댓값
dp[i][1] = Math.max(dp[i-2][0], dp[i-2][1]) + stairs[i];
}
System.out.println(Math.max(dp[N][0], dp[N][1]));
}
}
변경 사항:
Math.max() 사용으로 가독성 향상현재 계단에 도착하는 2가지 방법:
제약 조건 처리:
dp[i][0] = dp[i-1][1] + stairs[i] // 1칸 점프
dp[i][1] = max(dp[i-2][0], dp[i-2][1]) + stairs[i] // 2칸 점프
#백준 #DP #계단오르기 #동적계획법 #알고리즘 #Java #BOJ2579