이문제는 DP(Dynamic Programing) 기법을 이용하여
푸는 문제였으며
입력받는 2차원 배열 map과 동시에 같은 크기의 DP 배열을 생성하여
각 행마다 최댓값을 구하여 넣어주는 식의 코딩을 하였고
마지막 N-1 행에서 0번열 1번열의 최댓값을 비교하여 답을 출력하는 방법으로 코딩하였다.
package BOJ;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int[][] DP, map;
static int N;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int TC = Integer.parseInt(br.readLine());
for (int t = 0; t < TC; t++) {
N = Integer.parseInt(br.readLine());
map = new int[2][N];
DP = new int[2][N];
StringTokenizer st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) {
map[0][i] = Integer.parseInt(st.nextToken());
}
st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) {
map[1][i] = Integer.parseInt(st.nextToken());
}
DP[0][0] = map[0][0];
DP[1][0] = map[1][0];
for (int i = 1; i < N; i++) {
if (i >= 2) {
int go = Math.max(DP[0][i - 2], DP[1][i - 2]);
DP[0][i] = Math.max(map[0][i] + go, map[0][i] + DP[1][i - 1]);
DP[1][i] = Math.max(map[1][i] + go, map[1][i] + DP[0][i - 1]);
} else {
DP[0][i] = map[0][i] + DP[1][i - 1];
DP[1][i] = map[1][i] + DP[0][i - 1];
}
}
System.out.println(Math.max(DP[0][N - 1], DP[1][N - 1]));
}
}
}
'Algorithm & Data Structures > BOJ' 카테고리의 다른 글
13549. 숨바꼭질3 (Java) (0) | 2023.10.17 |
---|---|
2206. 벽부수고 이동하기 (Java) (0) | 2023.10.16 |
11404. 플로이드 (Java) (0) | 2023.10.12 |
4485. 녹색 옷을 입은 애가 젤다지? (Java) (1) | 2023.10.11 |
17144. 미세먼지 안녕! (Java) (2) | 2023.10.11 |