알고리즘/코테 문제
[BOJ/백준 21921][C++] 블로그
gyong
2023. 8. 11. 18:22
반응형
문제
https://www.acmicpc.net/problem/21921
문제 내용
블로그를 시작한 후 N일이 지났다.
X일 동안 가장 많이 들어온 방문자 수를 출력한다. (0명이면 SAD 출력)
최대 방문자 수가 0명이 아니라면 둘째 줄에 기간이 몇 개 있는도 출력한다.
문제 풀이
슬라이딩 윈도우로 문제를 해결할 수 있다.
나는 연속된 X일의 모든 방문자 수를 벡터에 저장한 후, max_element와 count 함수를 통해 해결했다.
코드
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n, x;
cin >> n >> x;
vector<int> arr(n, 0);
for (int i = 0; i < n; i++)
cin >> arr[i];
vector<int> ssum(n - x + 1, 0);
for (int i = 0; i < x; i++)
ssum[0] += arr[i];
for (int i = 1; i < n - x + 1; i++) {
ssum[i] = ssum[i - 1] + arr[i + x - 1] - arr[i - 1];
}
int num = *max_element(ssum.begin(), ssum.end());
if (num == 0) {
cout << "SAD";
} else {
cout << num << '\n';
cout << count(ssum.begin(), ssum.end(), num);
}
}
반응형