[백준] 21921번: 블로그

2022. 9. 17. 22:07TIL💡/Algorithms

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

 

21921번: 블로그

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

www.acmicpc.net

구간이 정해져있어서 누적합이나 슬라이딩 윈도우로 풀면 용이한 문제이다.

쉬운 문제인데, 갱신 부분에서 variable을 잘못 썼다..ㅠ

흑흑

제발 이상한 실수 좀 하지 말자..

#include <iostream>
#include <vector>

using namespace std;
int main() {
    int n, x;
    cin >> n >> x;
    
    vector<int> visitors(n);
    for(int i = 0;i < n;i++) {
        cin >> visitors[i];
    }
    int max_sum_visitor = 0;
    int max_sum_cnt = 1;
    
    for(int i = 0;i < x;i++) {
        max_sum_visitor += visitors[i];
    }

    int sum_visitor = max_sum_visitor;
    for(int i = x;i < n;i++) {
        sum_visitor = sum_visitor + visitors[i] - visitors[i - x];
        if(max_sum_visitor < sum_visitor) {
            max_sum_visitor = sum_visitor;
            max_sum_cnt = 1;
        }
        
        else if(max_sum_visitor == sum_visitor) {
            max_sum_cnt++;
        }
    }
    
    if(max_sum_visitor == 0) {
        cout << "SAD" << '\n';
    }
    else {
        cout << max_sum_visitor << '\n';
        cout << max_sum_cnt << '\n';
    }
}