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 |
댓글