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

 

이번에 볼 문제는 백준 2435번 문제인 기상청 인턴 신현수이다.
문제는 아래 링크를 확인하자.

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

 

2435번: 기상청 인턴 신현수

첫째 줄에 두 개의 정수 N과 K가 한 개의 공백을 사이에 두고 주어진다. N은 온도를 측정한 전체 날짜의 수이다. N은 2이상, 100이하이다. K는 합을 구하기 위한 연속적인 날짜의 수이다. K는 1과 N 사

www.acmicpc.net

주어진 배열의 크기 K인 구간합의 최댓값을 구하는 문제이다. 고정된 배열에서의 구간합의 최댓값을 구하는 문제이므로 prefix sum 배열을 이용해 모든 구간합을 한 번씩 구해보는 것으로 문제를 해결할 수 있다.

 

구간합의 최댓값이 음수가 될 수 있음에 유의해 구현하자. 모든 원소가 음수인 경우를 생각하면 그러한 경우가 있음을 어렵지 않게 알 수 있을 것이다.

 

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

#include <iostream>
using namespace std;

int N, K;
int psum[101];
int ans = -1000000007;

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	
	cin >> N >> K;
	for (int i = 1; i <= N; i++) {
		cin >> psum[i];
		psum[i] += psum[i - 1];
	}
	
	for (int L = 0, R = K; R <= N; L++, R++) {
		ans = max(ans, psum[R] - psum[L]);
	}
	
	cout << ans;
}
728x90

+ Recent posts