본문 바로가기

코딩 테스트/백준(java)

DP - 1912. 연속합

반응형

문제

www.acmicpc.net/problem/1912

 

1912번: 연속합

첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다.

www.acmicpc.net

 

잠깐만

값을 더해가는 도중, 어느시점에 초기화를 진행할 지 생각해보세요

 

코드

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이 됩니다.

 

문제 예제를 보면 다음과 같습니다.

 

추천 문제

skillist.tistory.com/213

 

121. Best Time to Buy and Sell Stock

문제 leetcode.com/problems/best-time-to-buy-and-sell-stock/ Best Time to Buy and Sell Stock - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowl..

skillist.tistory.com

반응형

'코딩 테스트 > 백준(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