반응형
문제
잠깐만
값을 더해가는 도중, 어느시점에 초기화를 진행할 지 생각해보세요
코드
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));
StringTokenizer st = new StringTokenizer(br.readLine());
int inputNum = Integer.parseInt(st.nextToken());
int maxSum = Integer.MIN_VALUE;
int tempSum = 0;
st = new StringTokenizer(br.readLine());
for (int i = 1; i <= inputNum; i++) {
int value = Integer.parseInt(st.nextToken());
tempSum = Math.max(tempSum + value, value);
maxSum = Math.max(maxSum, tempSum);
}
System.out.print(maxSum);
}
}
설명
tempSum을 더해가며 계산하면 되는데, 더하기를 중단해야할 시점이 있습니다.
바로, tempSum + value < value인 시점이죠.
제가 만든 예제를 한번 볼까요?
-2를 입력하면 tempSum은 -2가 되죠.
-3을 입력하면 max(-2-3, -3)을 선택해야 합니다. 더한 값인 -5보다는 입력값 -3이 더 크기 때문에 더할 필요는 없겠죠?
-4을 입력하면 max(-3-4, -4)을 선택해야 합니다. 더한 값인 -7보다는 입력값 -4가 더 크기 때문에 더할 필요는 없겠죠?
1을 입력하면 max(-4+1, 1)을 선택해야 합니다. 더한 값인 -3보다는 입력값 1가 더 크기 때문에 더할 필요는 없겠죠?
결과적으로 max값은 1이 됩니다.
문제 예제를 보면 다음과 같습니다.
추천 문제
반응형
'코딩 테스트 > 백준(java)' 카테고리의 다른 글
DP - 11727. 2×n 타일링 2 (0) | 2021.03.31 |
---|---|
DP - 10844. 쉬운 계단 수 (0) | 2021.03.31 |
DP - 2193. 이친수 (0) | 2021.03.30 |
DP - 2748. 피보나치 수 2 (0) | 2021.03.30 |
DP - 11053. 가장 긴 증가하는 부분 수열 (0) | 2021.03.30 |