반응형
문제 링크: https://www.acmicpc.net/problem/1912
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보다 작거나 같은 정수이다.
출력
첫째 줄에 답을 출력한다.
풀이 및 코드
#include <iostream>
using namespace std;
int input[100000]; // input 배열 초기화
int dp[100000]; // dp 배열 초기화
int main(){
// 입력
int N;
cin >> N;
for(int i = 0; i < N; i++){
int temp;
cin >> temp;
input[i] = temp;
}
// dp[0] 및 최종 결과 result 초기화
dp[0] = input[0];
int result = dp[0];
// 각 element 마다 (전 dp 배열의 값 + input 값)과 (input값) 중
// 더 큰 값을 dp[i]에 저장
// 현재 result 보다 해당 값이 더 크면 result 업데이트
for(int i = 1; i < N; i++){
dp[i] = max(dp[i - 1] + input[i], input[i]);
result = max(result, dp[i]);
}
// 출력
cout << result << endl;
return 0;
}
https://github.com/haram1117/AlgorithmStudy/commit/a6f4a0588ed97ab6a9e2855223c6634d44eed0fd
DP1912 · haram1117/AlgorithmStudy@a6f4a05
Show file tree Showing 10 changed files with 50 additions and 306 deletions.
github.com
반응형
'알고리즘 > BOJ' 카테고리의 다른 글
알고리즘 - 백준 2133 (타일 채우기) (0) | 2023.01.04 |
---|---|
알고리즘 - 백준 2011 (암호코드) (0) | 2023.01.03 |
알고리즘 - 백준 1699 (제곱수의 합) (0) | 2023.01.01 |
알고리즘 - 백준 1463 (1로 만들기) (0) | 2023.01.01 |
알고리즘 - 백준 2741 (N 찍기) (0) | 2021.08.29 |