본문 바로가기
자료구조와 알고리즘/알고리즘

2559

by oncerun 2023. 7. 6.
반응형

 

문제 요약

 

특정 기간 동안 온도를 측정했다, 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

댓글