본문 바로가기
Algorithms/simulation

연속부분합 찾기

by OKOK 2020. 1. 9.

연속부분합 찾기

 

제한시간: 1000 ms    메모리제한: 32 MB

 

N개의 정수를 담고 있는 배열이 주어졌을 때, 여기서 가능한 연속 부분합을 구하는 프로그램을 작성하라.

 

여기서 연속 합이라는 것은 배열에서 연속된 숫자들을 선택해서 합하였을 때의 값을 말한다. 

아무 배열도 택하지 않는 경우도 연속된 배열합에 포함됨을 유의하자.

 

입력의 첫 번째 줄에는 정수 N(1≤N≤105)가 입력된다. 그리고 그 다음 줄에는 N개의 배열에 담긴 숫자가 순서대로 입력된다. 숫자의 범위는 -100이상 100이하의 정수다.


입력에 대한 가장 큰 연속 부분합을 출력한다.

 

4

1 2 -2 4

 

5

 

10

3 -4 0 1 7 -4 13 -9 8 -3

 

17

 

#include <stdio.h>

#define MAX 10 // 100005

int N, arr[MAX], ans;

int Max(int x, int y) { return x > y ? x : y; }
int main()
{
	freopen("input.txt", "r", stdin);
	scanf("%d", &N);
	for (int i = 1; i <= N; i++) {
		scanf("%d", &arr[i]);
		if (arr[i - 1] > 0) arr[i] += arr[i - 1]; // 하나씩 더해가면서 확인 함, 이전값이 음수인지 아닌지
		ans = Max(ans, arr[i]);
	}
	printf("%d\n", ans);
	return 0;
}

'Algorithms > simulation' 카테고리의 다른 글

비밀편지  (0) 2020.01.09
Square  (0) 2020.01.09
기수정렬(Radix Sort)  (0) 2020.01.09
책꽂이 만들기  (0) 2020.01.09
5 Problem C : 루빅의 사각형  (0) 2019.11.13

댓글