본문 바로가기
알고리즘/백준 문제

21921 - 블로그

by HDobby 2023. 3. 2.

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

 

21921번: 블로그

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

www.acmicpc.net

생각해 보기

  • 최대 먼저 찾고 그 값과 일치하는 인덱스를 찾을 필요는 없다.
  • 구간합 혹은 투포인터로 한칸씩 움직이며 그때그때 갱신해도 된다.

코드

더보기
#include<iostream>
#include<vector>

using namespace std;

int N,X,tmp;
vector<int> partsum;

void input(){
    cin>>N>>X>>tmp;

    partsum.push_back(tmp);
    for(int i=1;i<N;++i){
        cin>>tmp;
        partsum.push_back(partsum[i-1]+tmp);
    }
}

void solution(){
    int mnum=partsum[X-1], cnt=1;


    for(int i=X;i<N;++i){
        int now = partsum[i]-partsum[i-X];
        if(mnum==now)
            ++cnt;
        else if(mnum<now){
            mnum=now;
            cnt=1;
        }
    }
    if(mnum==0)
        cout<<"SAD"<<'\n';
    else
        cout<<mnum<<'\n'<<cnt<<'\n';
}

int main(){
    ios_base::sync_with_stdio(0);
    cout.tie(0);
    cout.tie(0);
    
    input();
    solution();

    return 0;
}

728x90

'알고리즘 > 백준 문제' 카테고리의 다른 글

19441 - 햄버거 분배  (0) 2023.03.03
1515 - 수 이어 쓰기  (0) 2023.03.02
20920 - 영단어 암기는 괴로워  (0) 2023.02.28
1244 - 스위치 켜고 끄기  (0) 2023.02.28
1205 - 등수 구하기  (0) 2023.02.27

댓글