컴굥일지

[BOJ/백준 21921][C++] 블로그 본문

알고리즘/코테 문제

[BOJ/백준 21921][C++] 블로그

gyong 2023. 8. 11. 18:22
반응형

문제

https://www.acmicpc.net/problem/21921

백준 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);
    }
}

 

반응형
Comments