<백준> 21921

진기명기·2025년 9월 1일

코딩테스트<C++>

목록 보기
133/212

블로그

문제

입력
첫째 줄에 블로그를 시작하고 지난 일수
NNXX가 공백으로 구분되어 주어진다.
둘째 줄에는 블로그 시작 11일차부터 NN일차까지 하루 방문자 수가 공백으로 구분되어 주어진다.

출력
첫째 줄에 XX일 동안 가장 많이 들어온 방문자 수를 출력한다. 만약 최대 방문자 수가 0명이라면 SAD를 출력한다.
만약 최대 방문자 수가 0명이 아닌 경우 둘째 줄에 기간이 몇 개 있는지 출력한다.

슬라이딩 윈도우 알고리즘을 사용해서 x만큼 더하고 한칸씩 밀면서 최댓값을 갱신하면 된다.

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

	int n, x;
	cin >> n >> x;

	vector<int> v(n);

	for (int i = 0; i < n; i++)
	{
		cin >> v[i];
	}

	int sum = 0;
	for (int i = 0; i < x; i++)
		sum += v[i];

	int maxValue = sum;
	int count = 1;

	for (int i = x; i < n; i++)
	{
		sum += v[i] - v[i - x];

		if (sum > maxValue)
		{
			maxValue = sum;
			count = 1;
		}
		else if (sum == maxValue)
			count++;
	}

	if (maxValue == 0)
		cout << "SAD";
	else
		cout << maxValue << "\n" << count << "\n";
}

0개의 댓글