[C] 백준 1912 : 연속합

오늘·2020년 8월 6일

백준

목록 보기
2/9

조건

  • 첫번째 줄에는 숫자의 갯수가 두번째 줄에는 그 숫자들이 입력된다.
  • 주어진 정수로된 임의의 수열 중 "연속된" 몇 개의 수의 합이 가장 큰 경우를 구해라

"연속된 수" 라는 조건을 제대로 이해하지 못했던 것과 예제문제 3번을 입력해봤을때 답이 -1이 아니라 자꾸 0으로 나와서 왜지 싶었다.

#include <iostream>
#include <algorithm>

using namespace std;

int i, N;
int arr[100023];
int dp [100023];

//배열은 담아야하는 것보다 조금 더 크게
//arr 은 숫자들을 저장할 배열, dp는 값을 저장할 배열


int main(void) {
	scanf("%d", &N);		
	for (i=1; i <=N; i++){			//입력될 N의 갯수만큼 돌려주기
		scanf("%d", &arr[i]);		//돌아가면서 두번째 줄에 입력된 숫자들을
	}					//배열에 저장해준다
	
    
    for (i=1; i<=N; i++){
		if (dp[i-1]+arr[i] > arr[i]){
			dp[i]= dp[i-1]+arr[i];
		}else {dp[i]=arr[i];}
	}
    
    
    
	int ans=dp[1];
	for (i=2; i<=N; i++){
		if (ans < dp[i]){
			ans = dp[i];
		}
	}
	printf("%d", ans);
	return 0;
}

https://kim6394.tistory.com/5

cin 과 cout 는 뭔가 편리하기는 한데, 속도면에서 scanf 와 printf가 더 좋다고 하길래 되도록 사용하지 않아보려 한다.

0개의 댓글