🍧 μ½”λ”©ν…ŒμŠ€νŠΈ

[μΈν”„λŸ° C++] 22. μ˜¨λ„μ˜ μ΅œλŒ“κ°’(1차원 λ°°μ—΄ ꡬ간합) (μ œν•œμ‹œκ°„ 1초)

peewoong 2024. 4. 22. 23:30

맀일 μ•„μΉ¨ 9μ‹œμ— ν•™κ΅μ—μ„œ μΈ‘μ •ν•œ μ˜¨λ„κ°€ μ–΄λ–€ μ •μˆ˜μ˜ μˆ˜μ—΄λ‘œ μ£Όμ–΄μ‘Œμ„ λ•Œ, 연속적인 λ©°μΉ λ™μ•ˆμ˜ μ˜¨λ„μ˜ 합이 κ°€μž₯ 큰 값을 μ•Œμ•„λ³΄κ³ μž ν•œλ‹€.

예λ₯Ό λ“€μ–΄, λ‹€μŒκ³Ό 같이 10일 κ°„μ˜ μ˜¨λ„κ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, 3 -2 -4 -9 0 3 7 13 8 -3 λͺ¨λ“  연속적인 μ΄ν‹€κ°„μ˜ μ˜¨λ„μ˜ 합은 λ‹€μŒκ³Ό κ°™λ‹€.

μ΄λ•Œ, μ˜¨λ„μ˜ 합이 κ°€μž₯ 큰 값은 21이닀.

맀일 μΈ‘μ •ν•œ μ˜¨λ„κ°€ μ •μˆ˜μ˜ μˆ˜μ—΄λ‘œ μ£Όμ–΄μ‘Œμ„ λ•Œ, 연속적인 λ©°μΉ  λ™μ•ˆμ˜ μ˜¨λ„μ˜ 합이 κ°€μž₯ 큰 값을 κ³„μ‚°ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

 

μž…λ ₯

첫 μ§Έ μ€„μ—λŠ” 두 개의 μ •μˆ˜ Nκ³Ό Kκ°€ ν•œ 개의  곡백을 사이에 두고  μˆœμ„œλŒ€λ‘œ μ£Όμ–΄μ§„λ‹€.

첫 번째 μ •μˆ˜ N은 μ˜¨λ„λ₯Ό μΈ‘μ •ν•œ 전체 λ‚ μ§œμ˜ μˆ˜μ΄λ‹€. N은 2이상 100,000 μ΄ν•˜μ΄λ‹€.

두 번째 μ •μˆ˜ KλŠ” 합을 κ΅¬ν•˜κΈ° μœ„ν•œ 연속적인 λ‚ μ§œμ˜ μˆ˜μ΄λ‹€. KλŠ” 1κ³Ό N μ‚¬μ΄μ˜ μ •μˆ˜μ΄λ‹€.

λ‘˜ μ§Έ μ€„μ—λŠ” 맀일 μΈ‘μ •ν•œ μ˜¨λ„λ₯Ό λ‚˜νƒ€λ‚΄λŠ” N개의 μ •μˆ˜κ°€ λΉˆμΉΈμ„ 사이에 두고 μ£Όμ–΄μ§„λ‹€. 이 μˆ˜λ“€μ€ λͺ¨λ‘ -100이상 100μ΄ν•˜μ΄λ‹€.

 

좜λ ₯

첫 μ§Έ μ€„μ—λŠ” μ˜¨λ„μ˜ μˆ˜μ—΄μ—μ„œ 연속적인 K일의 μ˜¨λ„μ˜ 합이 μ΅œλŒ€κ°€ λ˜λŠ” 값을 좜λ ₯ν•œλ‹€.

 

1트 (성곡)

#include <iostream>
using namespace std;

int main(void){
	//freopen("input.txt", "rt", stdin);
	
	int n, k, value, hap = 0;
	int max = -2147000000;
	cin >> n >> k;
	int v[n];
	
	for(int i = 0; i < n; ++i){
		cin >> value;
		v[i] = value;
	}
	
	for(int i = 0; i < n - 1; ++i){
		hap = v[i] + v[i+1];
		if(hap > max){
			max = hap;
		}
	}
	
	cout << max;
	return 0;
}

 

2트(κ°•μ˜ 풀이)

1. vector μ‚¬μš©

2. sum = a[0] + a[1] πŸ‘‰ 이후 sum = sum + (a[2] - a[0]), k만큼 μ¦κ°ν•΄μ„œ 반볡

#include <iostream>
#include <vector> 
using namespace std;

int main(void){
	freopen("input.txt", "rt", stdin);
	
	int n, k, sum = 0, max;
	
	cin >> n >> k;
	vector<int> a(n);
	for(int i = 0; i < n; ++i){
		cin >> a[i];
	}
	
	for(int i = 0; i < k; ++i){
		sum += a[i];
	}
	
	max = sum;
	for(int i = k; i < n; ++i){
		sum = sum + (a[i] - a[i-k]);
		if(sum > max) max = sum;
	}
	
	cout << max;
	return 0;
}