

-Code
import java.io.*;
public class BOJ2579 {
public static void main(String[] args) throws IOException {
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
int cnt = Integer.parseInt(br.readLine());
// 배열 초기화
int[] stairVal = new int[cnt + 1];
for (int i = 1; i <= cnt; i++) {
stairVal[i] = Integer.parseInt(br.readLine());
}
// dp
int[][] dp = new int[cnt + 1][2];
dp[1][0] = stairVal[1];
// 예외 처리
if (cnt >= 2) {
// 1칸 넘은 경우
dp[2][0] = stairVal[1] + stairVal[2];
// 2칸 넘은 경우
dp[2][1] = stairVal[2];
}
for (int i = 3; i <= cnt; i++) {
// 연속해서 3번을 1칸 뛸수 없음으로
// 3번째에서 2칸 올라온 뒤 이전 한칸의 값을 더해준 최대값
dp[i][0] = Math.max(dp[i - 3][0], dp[i - 3][1]) + stairVal[i - 1] + stairVal[i];
// 2칸 이동은 아무때나 상관없음으로 바로 비교
dp[i][1] = Math.max(dp[i - 2][0], dp[i - 2][1]) + stairVal[i];
}
System.out.println(Math.max(dp[cnt][0], dp[cnt][1]));
}
}
처음에 로직을 못짜서 스스로 짤 수 있을 때까지 반복했습니다. 추가적으로 예외 처리부분을 고려 안하거나 Max 비교를 빼먹는 실수도 했었습니다.
'Beakjoon&프로그래머스 > Java' 카테고리의 다른 글
| [백준/Java] 9151번 Starship Hakodate-maru (0) | 2026.01.16 |
|---|---|
| [백준/Java] 2156번 포도주 시식 (0) | 2026.01.16 |
| [프로그래머스/Java] 베스트앨범 (0) | 2026.01.15 |
| [백준/Java] 32952번 비트코인 반감기 (0) | 2026.01.15 |
| [백준/Java] 11054번 가장 긴 바이토닉 부분 수열 (0) | 2026.01.14 |