문제풀이(Problem Solving)

백준, BOJ, 21921번, 블로그 C++ [CPP] ★★

게임이 더 좋아 2022. 3. 5. 23:10
반응형
728x170

흥미로운 문제다.

실제로 최근 1달 이내...

최근 1년 이내..

최근 5년 이내..

를 가진 모든 데이터들을 이렇게 다룰 것만 같다.

 

그만큼 중요하지만 쉬운 문제라고 본다.

큐를 이용한다.

 

 

 

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

 


 

#맞는 풀이

#include <bits/stdc++.h>

using namespace std;

int N, X;


int main(){
    cin >> N >> X;
    
    queue<int> q;
    int cnt = 0;
    int sum = 0;
    
    unordered_map<int, int> number;
    int M = 0;
    while(N--){
        
        int visit;
        cin >> visit;
        sum += visit;
        q.push(visit);
        cnt++;
        
        if(cnt>=X){
            M = max(M,sum);
            number[sum]++;
            sum -= q.front();
            q.pop();
            cnt--;
        }
    }
    
    
    
    if(M == 0){
        cout << "SAD" << '\n';
    }else{
        cout << M <<'\n';
        cout << number[M] << '\n';
    }
    
    return 0;
}

 

큐에 하나씩 넣어주고

 

결국 큐의 크기를 정해놓고 날이 가도 큐만 오래된 날자는 빠지고 새로운 날짜가 들어오고

정말 단순하지만

우리 실생활에서 쓰일 법한 알고리즘이다.

 

반응형
그리드형