본문 바로가기
Algorithm/Baekjoon

Baekjoon 1912 연속합 JAVA

by Hunveloper 2022. 4. 15.
728x90
 

1912번: 연속합

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

www.acmicpc.net

문제

n개의 정수로 이루어진 임의의 수열이 주어진다. 우리는 이 중 연속된 몇 개의 수를 선택해서 구할 수 있는 합 중 가장 큰 합을 구하려고 한다. 단, 수는 한 개 이상 선택해야 한다.

예를 들어서 10, -4, 3, 1, 5, 6, -35, 12, 21, -1 이라는 수열이 주어졌다고 하자. 여기서 정답은 12+21인 33이 정답이 된다.

입력

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

출력

첫째 줄에 답을 출력한다.

풀이

1. 현재의 값( i )이 이전의 값( i-1 )보다 크면 현재값을 저장

2. 현재 ( i ) 와 이전의 값 ( i-1 )을 더한것이 현재보다 크면 현재값+이전값 ( i + (i -1 )) 을 현재 ( i )에 저장

 -> 확장하면 다이나믹형태로 저장가능하다.

 

코드
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));
		int n=Integer.parseInt(br.readLine());
		StringTokenizer st = new StringTokenizer(br.readLine());
		int[] arr = new int[n], dp = new int[n];
		for(int i=0;i<n;i++)
			arr[i]=Integer.parseInt(st.nextToken());
		dp[0]=arr[0];
		int ans=dp[0];
		for(int i=1;i<n;i++) {
			dp[i] = Math.max(dp[i-1]+arr[i], arr[i]);
			if(dp[i]>ans)
				ans=dp[i];
		}
		System.out.println(ans);
	}

}

 

728x90
728x90

'Algorithm > Baekjoon' 카테고리의 다른 글

Baekjoon 2156 포도주 시식 JAVA  (0) 2022.04.15
Baekjoon 15802 타노스 Python  (0) 2022.04.15
Baekjoon 17135 캐슬 디펜스 JAVA  (0) 2022.04.15
Baekjoon 14502 연구소 JAVA  (0) 2022.04.13
Baekjoon 1932 정수 삼각형 JAVA  (0) 2022.04.13

댓글