본문 바로가기

Algorithm/문제풀이

[백준] 1912번: 연속합

문제링크https://www.acmicpc.net/problem/1912

 

문제풀이

동적 계획법으로 쉽게 풀 수 있는 문제이다.

dp배열을 따로 만들어서, 각 자리까지의 최댓값을 저장한다.

 

소스코드

/*
 * 백준 1912번: 연속합
 */

#include <iostream>
#include <algorithm>

using namespace std;

#define MAX 100001

int arr[MAX];
int dp[MAX];

int main() {
	int n;
	cin >> n;

	for (int i = 0; i < n; i++) {
		cin >> arr[i];
	}

	dp[0] = arr[0];

	int max_sum = arr[0];
	for (int i = 1; i < n; i++) {
    	// (현재 값, 현재 값 + 이전까지의 최댓값) 중 더 큰 값 저장
		dp[i] = max(arr[i], arr[i] + dp[i - 1]);
		if (dp[i] > max_sum) max_sum = dp[i];
	}

	cout << max_sum;

	return 0;
}

 

'Algorithm > 문제풀이' 카테고리의 다른 글

[백준] 2178번: 미로탐색  (0) 2019.06.20
[백준] 1260번: DFS와 BFS  (0) 2019.06.19
[백준] 1978번: 소수 찾기  (0) 2019.06.13
[백준] 1003번: 피보나치 함수  (0) 2019.06.12
[백준] 2579번: 계단 오르기  (0) 2019.06.12