Problem
연속적인 합 중에서 가장 큰 수를 구하는 문제입니다.
Solution
한 가지만 기억하면 됩니다.
이전까지의 합이 음수면 새로 더하는 값은 무조건 현재보다 작다
예를 들어 [A, B, C, D]
가 입력으로 들어옵니다.
A + B + C
가 음수라면 A + B + C + D
는 무조건 D
보다 작겠죠?
어차피 구해야 하는건 최댓값이기 때문에 이전까지의 합은 음수라면 버리고 D
부터 다시 합을 구해나가면 됩니다.
Java Code
import java.util.*;
import java.io.*;
class Main {
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int n = Integer.parseInt(br.readLine());
int[] numbers = new int[n];
st = new StringTokenizer(br.readLine());
for (int i=0; i<n; i++) {
numbers[i] = Integer.parseInt(st.nextToken());
}
int max = numbers[0];
int sum = 0;
for (int i=0; i<n; i++) {
sum += numbers[i];
max = Math.max(max, sum);
if (sum < 0) sum = 0;
}
System.out.print(max);
}
}
'알고리즘 문제 > 백준' 카테고리의 다른 글
백준 2293 동전 1 (Java) (0) | 2020.03.28 |
---|---|
백준 2437번. 저울 (Java) (2) | 2020.03.17 |
백준 5397번. 키로거 (Java) (0) | 2019.09.24 |
백준 2178번. 미로 탐색 (Java) (0) | 2019.09.22 |
백준 16940번. BFS 스페셜 저지 (Java, Kotlin) (0) | 2019.09.14 |