반응형
문제 요약
특정 기간 동안 온도를 측정했다, n일 동안 온도의 합이 가장 큰 값을 알아보고자 한다.
수열 : 숫자나 기호의 나열을 의미한다. 수열은 일정한 패턴이나 규칙에 따라 순서대로 배열된 원소들로 구성된다. 각 원소는 항이라고도 불린다.
입력
두 개의 정수 N과 K가 한 개의 공백을 두고 주어진다.
N은 온도를 측정한 전체 날짜의 수이며 온도는 정수이다 (2 <= N <= 100,000)
K는 합을 구하기 위한 연속적인 날짜의 수 (1 <= K < N) -> 사이값이니까
다음에는 매일 측정한 온도를 나타내는 N개의 정수가 빈칸을 사이에 두고 주어진다. ( -100 이상, 100 이하)
출력
연속되는 K일의 최대 온도의 합
풀이
최대 값을 구할 땐 발생할 수 있는 최소 값을 우선적으로 구해야 한다.
최소를 구할 땐 역으로 최대 값을 구해야 한다.
그 이유는 최대 값을 구할 때 기준 값이 필요하기 때문이다.
max(최솟값, 계산된 값)
-100이 연속적으로 100,000이 나오는 상황이 가장 작은 최솟값이고, 이는 -10,000,000 값이다. 이를 최솟 값으로 활용한다.
다음은 각 구간의 합을 구해야 하는데, 이는 입력된 값을 더한 배열을 활용하면 된다.
#include <bits/stdc++.h>
using namespace std;
int n, k, tmp, ret = -10000004, sum[100004];
int main() {
cin >> n >> k;
for (int i = 1; i <= n; i++) {
cin >> tmp;
sum[i] = sum[i - 1] + tmp;
}
for(int j = k; j <= n; j++){
ret = max(ret, sum[j] - sum[j - k]);
}
cout << ret;
return 0;
}
반응형
'자료구조와 알고리즘 > 알고리즘' 카테고리의 다른 글
9375 (0) | 2023.07.08 |
---|---|
1620 (0) | 2023.07.06 |
9996 (0) | 2023.07.04 |
ROT13(11655) (0) | 2023.07.02 |
농구 경기(1159) (0) | 2023.07.02 |
댓글