Kadane’s Algorithm (카데인 알고리즘)
위의 문제는 전체 배열에서의 최대 부분합을 구하는 문제이다. Brute Force 방식으로 문제를 어렵지 않게(?) 해결할 수 있지만, 카데인 알고리즘을 이용하면 O(N)으로 문제를 해결할 수 있다.
medium.com
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
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[] arr = new int[N];
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
for(int i = 0; i < N; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
if(N == 1)
System.out.println(arr[0]);
else {
int max = arr[0];
int result = max;
for(int i = 1; i < N; i++) {
max = Math.max(arr[i], max+arr[i]);
if(result < max)
result = max;
}
System.out.println(result);
}
}
}
'백준' 카테고리의 다른 글
[백준] 11053 가장 긴 증가하는 부분 수열 [자바] (0) | 2021.12.24 |
---|---|
[백준] 2156 포도주 시식[자바] (0) | 2021.12.23 |
[백준] 2636 치즈 [자바] (0) | 2021.12.11 |
[백준] 9466 텀 프로젝트 [자바] (0) | 2021.12.08 |
[백준] 2206 벽 부수고 이동하기 [자바] (0) | 2021.12.07 |