Koala - 7기/코딩테스트 준비 스터디

[백준/C++] 2435번 기상청 인턴 신현수

leoyi 2022. 7. 30. 15:27

 

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

 

2435번: 기상청 인턴 신현수

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

www.acmicpc.net

문제 분석

N개의 정수를 입력 받아서 연속되는 K개의 수의 합이 최대가 되는 값을 구하는 문제이다. 누적합을 사용해야 시간 제한을 어기지 않을 수 있다.

 

코드

#include <iostream>
#include <limits.h>
using namespace std;

int main(){
	int n, k; cin>>n>>k;
	int sum[n+1]; sum[0] = 0;
	int tmp;
	for(int i=1; i<=n; i++){
		cin>>tmp;
		sum[i] = tmp +sum[i-1];
	}
	int max = INT_MIN;
	
	for(int i = k; i<=n; i++){
		tmp = sum[i] - sum[i-k];
		if(max<tmp)max = tmp;
	}
	
	cout<<max;
	
	return 0;
}

 

문제 풀이

  1. 입력받을 수의 개수 n과 연속되는 일의 수인 k를 입력받는다.
  2. 배열 sum[n+1]을 선언하고 sum[0]을 0으로 둔다. 이후 n개의 수를 입력받으면서 sum에 입력받은 수까지의 누적합을 저장한다.
  3. 반복문을 통해 연속되는 k개의 수의 합 중에 최댓값을 구한 후 출력한다.