N개의 일수동안 온도를 재었다. K수의 온도값의 최대값을 구해야한다. 최대값을 구할떄는 기억해야할게있다.
1. 최대값을 구하기전에 최소값을 먼저구해야한다. 반대로 최소값을 구할때는최대값을 먼저구해야한다.
2. 정적배열에 데이터가 담기는것이다. 그러니 이때는 누적합이 생각이나야한다 prefix sum = psum!
그럼 바로 문제를 풀어보자
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
#include<bits/stdc++.h>
using namespace std;
int n,k,v,psum[100004],ret = -10000004;
int main() {
cin >> n >> k;
//누적합
for(int i = 1; i<=n; i++)
{
cin >> v;
psum[i] = psum[i-1] + v;
}
for(int i=k; i<=n; i++)
{
ret = max(ret,psum[i] - psum[i-k]);
}
cout << ret;
return 0;
}
|
cs |
3번코드줄 설명
ret = -1000만번인 이유는 온도는 +100 -100이라고하며 n은 최대 10만번이다 그러므로 10만X-100하면 -1000만번이다
그러나 정확하게 1000만번으로 하게되면 혹시모를 에러가있을수있으므로 +1이나 몇정도는 증가시키는게 좋다.
10번 코드줄 설명
누적합을 구할떄는 sum+= i로도 할수있으나 그럴경우 시간복잡도가 말도안되게 증가난다. 그렇기에 현재 누적배열을 구할떄는 이전누적배열 더하기 현재 값이나 배열이라면 배열을 더하면된다.
17번 코드줄 설명
max를 이용해서 최대값을 구한다. 구할때는 누적합의 쿼리 즉 n번에서 합해야하는 값 k번의 값을 누적시켜주면된다.
결과
어렵고 이해도 쉽지않지만 대단한개발자가 되기위해서는 더열심히해야한다.화이팅
'프로그래밍지식 > 알고리즘' 카테고리의 다른 글
132 효율적인 해킹 c++ (dfs/bfs) (0) | 2024.03.20 |
---|---|
백준 트럭주차요금 문제 2979 C++ (0) | 2023.12.23 |
백준 10808 알파벳개수 C++ (1) | 2023.12.21 |
C++ struct 구조체안에 매개변수 비교하기 (0) | 2023.08.26 |
ios_base::sync_with_stdio(false) cin.tie(NULL); (0) | 2023.08.24 |