[BOJ] 2559번 | μˆ˜μ—΄ (C++)

2023. 8. 27. 17:57ㆍCoding Test/BOJ

πŸ”—λ¬Έμ œ λ³΄λŸ¬κ°€κΈ°
 

2559번: μˆ˜μ—΄

첫째 μ€„μ—λŠ” 두 개의 μ •μˆ˜ Nκ³Ό Kκ°€ ν•œ 개의 곡백을 사이에 두고 μˆœμ„œλŒ€λ‘œ 주어진닀. 첫 번째 μ •μˆ˜ N은 μ˜¨λ„λ₯Ό μΈ‘μ •ν•œ 전체 λ‚ μ§œμ˜ μˆ˜μ΄λ‹€. N은 2 이상 100,000 μ΄ν•˜μ΄λ‹€. 두 번째 μ •μˆ˜ KλŠ” 합을 κ΅¬ν•˜κΈ°

www.acmicpc.net

 

πŸ§‘‍πŸ’»ν’€μ΄ κ³Όμ •

λ„€νŠΈμ›Œν¬μ—μ„œ TCP ν”„λ‘œν† μ½œμ„ 곡뢀할 λ•Œ λ΄€μ—ˆλ˜ μŠ¬λΌμ΄λ”© μœˆλ„μš°(Sliding window) κ°œλ…μ„ μ μš©ν•˜μ—¬ ν’€ 수 μžˆμŠ΅λ‹ˆλ‹€.

  1. μž…λ ₯으둜 μ£Όμ–΄μ§€λŠ” 각 μˆ«μžλ“€μ„ λ°°μ—΄(arr)에 μ €μž₯ν•˜λ˜, [0, K - 1]κΉŒμ§€μ˜ 합계λ₯Ό λ³„λ„μ˜ λ³€μˆ˜(sum)에 μ €μž₯ν•΄λ‘‘λ‹ˆλ‹€.
  2. int start = 0, last = K둜 인덱슀 λ³€μˆ˜λ₯Ό λ‘‘λ‹ˆλ‹€.
  3. μ •λ‹΅ λ³€μˆ˜(maxSum)을 1λ²ˆμ—μ„œ κ΅¬ν•œ sum λ³€μˆ˜ κ°’μœΌλ‘œ μ΄ˆκΈ°ν™”ν•©λ‹ˆλ‹€.
  4. last < Kκ°€ λ§Œμ‘±ν•  λ•Œ, λ‹€μŒ 과정을 λ°˜λ³΅ν•©λ‹ˆλ‹€.
    • sum -= arr[start++];
    • sum += arr[last++];
    • maxSum = max(maxSum, sum);

 

βœοΈμ†ŒμŠ€ μ½”λ“œ 및 κ²°κ³Ό

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

int main()
{
	ios::sync_with_stdio(false);
	cout.tie(NULL); cin.tie(NULL);

	int N, K;
	cin >> N >> K;

	// 1. [0, K - 1]κΉŒμ§€ 합계 κ΅¬ν•˜κΈ°
	int sum = 0;
	vector<int> sequence(N);
	for (int i = 0; i < N; i++)
	{
		cin >> sequence[i];

		if (i < K)
			sum += sequence[i];
	}

	// 2. start, last 인덱슀λ₯Ό 톡해, ν•œ μΉΈμ”© 전진
	int maxSum = sum;
	for (int start = 0, last = K; last < N; start++, last++)
	{
		sum -= sequence[start];
		sum += sequence[last];

		maxSum = max(maxSum, sum);
	}

	cout << maxSum;
	return 0;
}

 

728x90
λ°˜μ‘ν˜•