반응형
문제 설명
자바 코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int point[][] = new int[n][n];
int maxPoint[][] = new int[n][n];
int result = Integer.MIN_VALUE;
for (int i = 0; i < n; i++) {
StringTokenizer strTok = new StringTokenizer(br.readLine(), " ");
for (int j = 0; j <= i; j++) {
point[i][j] = Integer.parseInt(strTok.nextToken());
}
}
maxPoint[0][0] = point[0][0];
for (int i = 1; i < n; i++) {
for (int j = 0; j <= i; j++) {
if (j == 0)
maxPoint[i][j] = maxPoint[i - 1][j] + point[i][j];
else if (j == i)
maxPoint[i][j] = maxPoint[i - 1][j - 1] + point[i][j];
else
maxPoint[i][j] = Integer.max(maxPoint[i - 1][j - 1], maxPoint[i - 1][j]) + point[i][j];
}
}
for (int i = 0; i < n; i++) {
result = Integer.max(result, maxPoint[n - 1][i]);
}
System.out.print(result);
}
}
문제 풀이
밑에는 입력값 최대값 경로 배열순서 로 되어 있습니다.
1레벨 7 7 00
2레벨 3 8 3+7 8+7 10 11
3레벨 8 1 0 8+(3+7) 1+(8+7) 0+(8+7) 20 21 22
4레벨 2 7 4 4 2+(8+(3+7)) 5+(8+(3+7)) 4+(1+(8+7)) 4+(0+(8+7)) 30 31 32 33
이렇게 적어보니 최대값을 구하는 식은 현재 레벨의 첫번째 ,중간단계, 마지막번째 이렇게 3가지로 나누어집니다.
코드를 적으면 다음과 같습니다.
if (j == 0) maxPoint[i][j] = maxPoint[i - 1][j] + point[i][j]; //첫번째
else if (j == i) maxPoint[i][j] = maxPoint[i - 1][j - 1] + point[i][j];//마지막
else maxPoint[i][j] = Integer.max(maxPoint[i - 1][j - 1], maxPoint[i - 1][j]) + point[i][j];//중간
동적프로그래밍으로 결과값을 저장하여 마지막 레벨중 가장 큰 결과값을 출력하여 풀었습니다.
반응형
'프로그래밍 > 알고리즘 풀이' 카테고리의 다른 글
백준 7576 토마토 자바 (0) | 2021.08.04 |
---|---|
백준 1149 RGB거리 자바 (0) | 2021.07.29 |
백준 2579 계단 오르기 자바 (0) | 2021.07.14 |
백준 1463 1로 만들기 자바 (0) | 2021.07.13 |
백준 1003 피보나치 함수 자바 (0) | 2021.07.13 |
댓글