※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 1912번 문제인 연속합이다.
문제는 아래 링크를 확인하자.

https://www.acmicpc.net/problem/1912 

 

1912번: 연속합

첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다.

www.acmicpc.net

이 문제는 Maximum Subarray Problem을 해결하는 문제이다. 이 문제를 해결하는 알고리즘으로 Kadane의 알고리즘이 잘 알려져있다.

 

이 문제에 대한 자세한 정보는 다음 링크를 참고하자:

en.wikipedia.org/wiki/Maximum_subarray_problem

 

아래는 제출한 소스코드이다.

#include <iostream>
using namespace std;

int arr[100000];

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	int N; cin >> N;
	for (int i = 0; i < N; i++) {
		cin >> arr[i];
	}
	int ans = -1000000001, psum = 0;
	int L = 0, R = 0;
	while (R < N) {
		psum += arr[R++];
		if (psum > ans) ans = psum;
		while (psum < 0) {
			psum -= arr[L++];
		}
	}

	cout << ans;
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 1913 // C++] 달팽이  (0) 2021.05.31
[BOJ 1021 // C++] 회전하는 큐  (0) 2021.05.30
[BOJ 9184 // C++] 신나는 함수 실행  (0) 2021.05.28
[BOJ 2188 // C++] 축사 배정  (0) 2021.05.27
[BOJ 1197 // C++] 최소 스패닝 트리  (0) 2021.05.26

+ Recent posts