https://www.acmicpc.net/problem/1912
1912번: 연속합
첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다.
www.acmicpc.net
- seq[i][0]에는 이전 인덱스 seq[i-1][0] 와 seq[i-1][1] 둘중 더 큰값을 저장한다.
- seq[i][1]에는 현재 들어오는 값 inp[i]와, seq[i-1][1] + inp[i] (누적 값) 을 비교하여 더 큰것을 저장한다.
- 마지막 배열 seq[n-1][0] 과 seq[n-1][1]를 비교하여 더 큰값이 최대 연속합이다.
코드
//1912
#include <iostream>
using namespace std;
int max(int a, int b){
if(a>b) return a;
else return b;
}
int main(int argc, const char * argv[]) {
cin.tie(NULL);
ios::sync_with_stdio(0);
long long seq[100001][2]={0,};
long long inp[100001] = {0,};
int n;
cin >> n;
for(int i=0;i<n;i++)cin >> inp[i];
seq[0][0] = seq[0][1] = inp[0];
for(int i=1;i<n;i++){
seq[i][0] = max(seq[i-1][0], seq[i-1][1]);
seq[i][1] = max(inp[i], seq[i-1][1] + inp[i]);
}
long long result = max(seq[n-1][0], seq[n-1][1]);
cout << result;
return 0;
}
'코딩테스트 연습 > Baekjoon' 카테고리의 다른 글
[Baekjoon] 2156번: 포도주 시식 / dynamic (0) | 2022.04.01 |
---|---|
[Baekjoon] 1932번: 정수 삼각형 / dynamic (0) | 2022.04.01 |
[Baekjoon] 1699번: 제곱수의 합 / dynamic (0) | 2022.04.01 |
[Baekjoon] 16194번: 카드 구매하기 2 / dynamic (0) | 2022.04.01 |
[Baekjoon] 15990번: 1, 2, 3 더하기 5 / dynamic (0) | 2022.03.31 |