https://www.acmicpc.net/problem/21921
21921번: 블로그
첫째 줄에 $X$일 동안 가장 많이 들어온 방문자 수를 출력한다. 만약 최대 방문자 수가 0명이라면 SAD를 출력한다. 만약 최대 방문자 수가 0명이 아닌 경우 둘째 줄에 기간이 몇 개 있는지 출력한다
www.acmicpc.net
풀이 :
- 11441번 문제에서 응용된 문제
- 주어진 x가 j가 되고, i는 j-x가 되는 것.
- 구간합에서 가장 큰 값을 구하되, 가장 큰 값이 여러 개일 경우 갯수를 세어준다
- 가장 큰 값이 0일 경우 SAD를 출력하고, 그렇지 않다면 가장 큰 값과 갯수를 출력한다
코드 :
#include <iostream>
#include <algorithm>
using namespace std;
int main(){
cin.tie(NULL);
ios::sync_with_stdio(false);
int n, x, num, sum[250005] = {0, }, max, cnt;
cin >> n >> x;
max = cnt = 0;
for(int i=1; i<=n; i++){
cin >> num;
sum[i] = sum[i-1] + num; //누적합 배열 만들기
}
for(int i=x; i<=n; i++){ //i는 x에서부터 시작
if(sum[i]-sum[i-x] > max){ //x일만큼의 구간합이 더 클 경우
max = sum[i]-sum[i-x]; //max를 갱신하고
cnt = 1; //cnt를 초기화해준다
}else if(sum[i]-sum[i-x] == max){ //max값과 같을 경우
cnt++; //갯수를 더해준다
}
}
if(max == 0){
cout << "SAD\n";
}else{
cout << max << '\n' << cnt << '\n';
}
}
'PS_Baekjoon' 카테고리의 다른 글
[백준 C++] 11899번 : 괄호 끼워넣기 (0) | 2023.03.26 |
---|---|
[백준 C++] 20365번 : 블로그2 (0) | 2023.03.25 |
[백준 C++] 16165번 : 걸그룹 마스터 준석이 (1) | 2023.03.23 |
[백준 C++] 1475번 : 방 번호 (1) | 2023.03.22 |
[백준 C++] 1431번 : 시리얼 번호 (1) | 2023.03.21 |