스터디/알고리즘

[알고리즘][C++] 온도의 최대값 (제한시간)

y00&z1 2022. 7. 18. 16:00
#include <stdio.h>
#include <vector>
using namespace std;

//int num[1000000];
//int main(){
//	//freopen("input.txt", "rt", stdin);
//	int n, k, i, max=-2147000000, sum=0; 
//	scanf("%d %d", &n, &k);
//	for(i=0; i<n; i++){
//		scanf("%d", &num[i]);
//	}
//	for(i=0; i<n-1; i++){
//		sum = num[i]+num[i+k-1];
//		if(sum>max) max=sum;
//	}
//	printf("%d", max);
//	
//	
//	return 0;
//}
//->채점 받으면 오답출력됨

int main(){
	//freopen("input.txt", "rt", stdin);
	int n, k, i, max=-2147000000, sum=0; 
	scanf("%d %d", &n, &k);
	vector<int> num(n);
	for(i=0; i<n; i++){
		scanf("%d", &num[i]);
	}
	for(i=0; i<k; i++){
		sum+=num[i];
	}
	max=sum;
	for(i=k; i<n; i++){
		sum = sum + (num[i]-num[i-k]);
		if(sum>max) max=sum;
	}
	printf("%d", max);
	
	
	return 0;
}

 

int num[1000001] 전역변수로 정적 배열로 선언했으나, 

 

-> 동적 배열 이용하기 vector<int> num(n); 

 

이중 for 문 사용 X

 

-> sum = sum(이전 인덱스 결과 값) + num[i](범위에 해당하는 부분) - num[i-k](범위에 해당하지 않는 부분) 

 

(예시)

k=2 

for(i=k; i<n; i++)

  3 -2  -4  -9 
sum 3 1 i=2 
1(sum) + -4(num[i]) - 3(num[i-k)
= -6
i=3
-6(sum) + -9 - (-2) 
= -13