접근
n의 최대값이 500이기 때문에 그냥 n x n인 2차원 배열을 만들어도 됐겠지만, 전부 사용한다면 모를까 반은 비어있을 예정이기 때문에 메모리가 낭비되는게 거슬렸다. 그래서 코드는 조금 복잡해지더라도 n의 길이를 가지는 1차원 배열 2개를 만들어서 윗줄부터 하나씩 내려갈 때, 현재 계산하는 줄(cur)과 윗줄까지 계산한 결과(prev)를 담도록 했다. 이러면 낭비되는 메모리도 줄일 수 있을 뿐더러, 차지하는 공간이 n^2에서 n*2로 줄어들게 되기 때문에 n이 커질수록 더 이득일 것이라 생각했다.
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public 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[] prev = new int[n+1];
int[] cur = new int[n+1];
int answer = 0;
for(int i = 0;i < n;i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
for (int j = 0; j <= i; j++) {
int val = Integer.parseInt(st.nextToken());
if(j == 0) cur[j] = prev[j] + val;
else cur[j] = Math.max(prev[j-1] + val, prev[j] + val);
answer = Math.max(answer, cur[j]);
}
int[] tmp = prev;
prev = cur;
cur = tmp;
}
System.out.println(answer);
}
}
'Algorithm' 카테고리의 다른 글
[백준] 20922: 겹치는 건 싫어 JAVA (0) | 2023.01.15 |
---|---|
[백준] 11054: 가장 긴 바이토닉 부분 수열 JAVA (0) | 2023.01.10 |
[백준] 12865: 평범한 배낭 JAVA (0) | 2023.01.09 |
[백준] 1912: 연속합 JAVA (0) | 2023.01.08 |
[백준] 9095: 1, 2, 3 더하기 JAVA (0) | 2023.01.08 |