본문 바로가기
Computer Science

Problem A : 수열

by OKOK 2020. 1. 7.

Problem A : 수열

 

제한시간: 1000 ms    메모리제한: 0 MB

 

 

매일 아침 9시에 학교에서 측정한 온도가 어떤 정수의 수열로 주어졌을 때, 연속적인 며칠 동안의 온도의 합이 가장 큰 값을 알아보고자 한다.

 

예를 들어, 아래와 같이 10일 간의 온도가 주어졌을 때,

 

3 -2 -4 -9 0 3 7 13 8 -3

 

모든 연속적인 이틀간의 온도의 합은 아래와 같다.

 

 

이때, 온도의 합이 가장 큰 값은 21이다.

 

또 다른 예로 위와 같은 온도가 주어졌을 때, 모든 연속적인 5일 간의 온도의 합은 아래와 같으며,

 

 

 

이때, 온도의 합이 가장 큰 값은 31이다.

 

매일 측정한 온도가 정수의 수열로 주어졌을 때, 연속적인 며칠 동안의 온도의 합이 가장 큰 값을 계산하는 프로그램을 작성하시오.




첫째 줄에는 두 개의 정수 N과 K가 한 개의 공백을 사이에 두고 순서대로 주어진다. 첫 번째 정수 N은 온도를 측정한 전체 날짜의 수이다. N은 2 이상 100,000 이하이다. 두 번째 정수 K는 합을 구하기 위한 연속적인 날짜의 수이다. K는 1과 N 사이의 정수이다. 둘째 줄에는 매일 측정한 온도를 나타내는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 수들은 모두 -100 이상 100 이하이다.


첫째 줄에는 입력되는 온도의 수열에서 연속적인 K일의 온도의 합이 최대가 되는 값을 출력한다.

 

10 2

3 -2 -4 -9 0 3 7 13 8 -3

 

21

 

 

10 5

3 -2 -4 -9 0 3 7 13 8 -3

 

31

 

#include <stdio.h>

#define MAX 13 // 100100
int N, K, arr[MAX], ans = -10000000;

int main()
{
	freopen("input.txt", "r", stdin);
	scanf("%d %d", &N, &K); // 입력 받음
	for (int i = 1; i <= N; i++) {
		scanf("%d", &arr[i]); // 입력 받으면서
		arr[i] += arr[i - 1]; // 누적값을 계산함
	}
	for (int i = K; i <= N; i++) {
		if (ans < arr[i] - arr[i - K]) ans = arr[i] - arr[i - K]; // 시간 복잡도 2N으로 마무리 가능
	}
	printf("%d\n", ans);
	return 0;
}

'Computer Science' 카테고리의 다른 글

Problem C : 용액  (0) 2020.01.08
Problem B : const구간의 합 구하기(2D)  (0) 2020.01.07
큐브  (0) 2020.01.07
루빅의 사각형  (0) 2020.01.07
CPP OOP 유력문제  (0) 2019.07.18

댓글