
거의 바로 풀렸다!

이 문제도 계단 오르기와 매우 비슷한 느낌이었다.
바로 전의 것을 고르면 대각선의 것만 고를 수 있다는 점이, 연속해서 계단을 밟을 수 없는 계단 오르기와 비슷한 느낌이었다.
다만 이건 2차원 배열이라서 선택지가 하나 더 생긴다는 점이 달랐다.
그거 말고는 너무 익숙한 느낌이라서 바로 방법을 떠올리고, 바로 코드를 작성할 수 있었다!
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// T 입력 받기
int T = Integer.parseInt(br.readLine());
for (int t = 0; t < T; t++) {
// N 입력 받기
int N = Integer.parseInt(br.readLine());
// 점수 입력 받기
int[][] dp = new int[2][N];
StringTokenizer st = new StringTokenizer(br.readLine());
for (int j = 0; j < N; j++) {
dp[0][j] = Integer.parseInt(st.nextToken());
}
st = new StringTokenizer(br.readLine());
for (int j = 0; j < N; j++) {
dp[1][j] = Integer.parseInt(st.nextToken());
}
// dp
dp[0][1] += dp[1][0];
dp[1][1] += dp[0][0];
for (int j = 2; j < N; j++) {
dp[0][j] += Math.max(dp[1][j - 1], Math.max(dp[0][j - 2], dp[1][j - 2]));
dp[1][j] += Math.max(dp[0][j - 1], Math.max(dp[0][j - 2], dp[1][j - 2]));
}
// 출력
System.out.println(Math.max(dp[0][N - 1], dp[1][N - 1]));
}
}
}

예외 처리를 해주어야 한다..!

이렇게..😅
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// T 입력 받기
int T = Integer.parseInt(br.readLine());
for (int t = 0; t < T; t++) {
// N 입력 받기
int N = Integer.parseInt(br.readLine());
// 점수 입력 받기
int[][] dp = new int[2][N];
StringTokenizer st = new StringTokenizer(br.readLine());
for (int j = 0; j < N; j++) {
dp[0][j] = Integer.parseInt(st.nextToken());
}
st = new StringTokenizer(br.readLine());
for (int j = 0; j < N; j++) {
dp[1][j] = Integer.parseInt(st.nextToken());
}
// 예외 처리
if (N == 1) {
System.out.println(Math.max(dp[0][0], dp[1][0]));
} else {
// dp
dp[0][1] += dp[1][0];
dp[1][1] += dp[0][0];
for (int j = 2; j < N; j++) {
dp[0][j] += Math.max(dp[1][j - 1], Math.max(dp[0][j - 2], dp[1][j - 2]));
dp[1][j] += Math.max(dp[0][j - 1], Math.max(dp[0][j - 2], dp[1][j - 2]));
}
// 출력
System.out.println(Math.max(dp[0][N - 1], dp[1][N - 1]));
}
}
}
}