728x90
https://www.acmicpc.net/problem/2559
2559번: 수열
첫째 줄에는 두 개의 정수 N과 K가 한 개의 공백을 사이에 두고 순서대로 주어진다. 첫 번째 정수 N은 온도를 측정한 전체 날짜의 수이다. N은 2 이상 100,000 이하이다. 두 번째 정수 K는 합을 구하기
www.acmicpc.net
문제 요약
연속적인 며칠 동안의 온도합이 가장 큰 값 구하기
범위
N은 2 이상 100,000 이하
K는 1과 N 사이의 정수
온도 -100 이상 100 이하
연속 날짜에 포함되는 범위 내에서 해당 날짜들의 합을 계산하고 maxT(온도의 최댓값)을 업데이트해주면 된다.
여기서 L(연속 날짜의 첫번째 날짜)의 범위를 제대로 설정해줘야 하는데 입력된 모든 날짜의 온도를 첫번째 날짜로 설정하면 안되고 입력된 연속날짜 보다 작은 수까지가 L의 범위다. 즉, 연속 날짜가 k라면 N-k+1의 날짜가 L이 가질 수 있는 마지막 날짜다.
연속된 날짜의 범위(k)가 정해져있기 때문에 while 반북문을 통해 R의 범위를 L+k-1 로 해줬다.
//2559번: 수열
#include <iostream>
#include <algorithm>
using namespace std;
int n, k, temp[100001];
void input(){
cin >> n >> k;
for(int i=1; i<=n; i++) cin >> temp[i];
}
void solution(){
int sum = 0, R = 0, maxT = -10000000;
for(int L=1; L <= n-k+1; L++){ //L의 범위는 k를 더한 값보다 작아야된다!
sum -= temp[L-1];
while(R+1 <= L+k-1){
sum += temp[++R];
}
maxT = max(maxT, sum);
}
cout << maxT << '\n';
}
int main() {
ios::sync_with_stdio(0); cout.tie(0); cin.tie(0);
input();
solution();
return 0;
}
쉬운 문제였는데, 배열 초기 설정 값을 잘못 넣어서 무려 4번이나 틀린 문제.. 정신차리고 문제 풀기^^
💡공부 및 기록용 블로그이므로 오류가 있을 수 있습니다.💡
만약 문제에 오류나 오타가 있다면 댓글로 알려주세요➿
언제나 환영합니다. 감사합니다. 화이팅!
728x90
'알고리즘 > 백준' 카테고리의 다른 글
[c++] 1120번: 문자열 (0) | 2022.01.16 |
---|---|
[c++] 15565번: 귀여운 라이언 (0) | 2022.01.16 |
[c++] 2003번: 수들의 합 2 (0) | 2022.01.16 |
[c++] 1806번: 부분합 (0) | 2022.01.15 |
[c++] 5800번: 성적 통계 (0) | 2022.01.14 |