BOJ 21921, 블로그

lilamaris
February 25, 2026 2 min read

문제

찬솔이는 블로그를 시작한 지 벌써 $N$일이 지났다.

요즘 바빠서 관리를 못 했다가 방문 기록을 봤더니 벌써 누적 방문 수가 6만을 넘었다.

찬솔이는 $X$일 동안 가장 많이 들어온 방문자 수와 그 기간들을 알고 싶다.

찬솔이를 대신해서 $X$일 동안 가장 많이 들어온 방문자 수와 기간이 몇 개 있는지 구해주자.

입력

첫째 줄에 블로그를 시작하고 지난 일수 $N$와 $X$가 공백으로 구분되어 주어진다.

둘째 줄에는 블로그 시작 $1$일차부터 $N$일차까지 하루 방문자 수가 공백으로 구분되어 주어진다.

출력

첫째 줄에 $X$일 동안 가장 많이 들어온 방문자 수를 출력한다. 만약 최대 방문자 수가 0명이라면 SAD를 출력한다.

만약 최대 방문자 수가 0명이 아닌 경우 둘째 줄에 기간이 몇 개 있는지 출력한다.

제한

  •  $1 \le X \le N \le 250,000$ 
  •  $0 \le$ 방문자 수 $\le 8,000$ 

내 구현

#include <iostream>
#define IO std::cin.tie(NULL), std::ios_base::sync_with_stdio(false)

#define MAX 250000

int A[MAX], N, X;

void solve() {
  std::cin >> N >> X;

  for (int i = 0; i < N; i++) {
    std::cin >> A[i];

    if (i != 0) {
      A[i] += A[i - 1];
    }
  }

  int sum, max = 0, cnt = 0;
  for (int r = X - 1, l; r < N; r++) {
    l = r - X + 1;
    if (l != 0) {
      sum = A[r] - A[l - 1];
    } else {
      sum = A[r];
    }
    if (max < sum) {
      max = sum;
      cnt = 1;
    } else if (max == sum) {
      cnt++;
    }
  }

  if (max == 0) {
    std::cout << "SAD";
  } else {
    std::cout << max << '\n' << cnt;
  }
}

int main() {
  IO;
  solve();
  return 0;
}

© 2025 All Rights Reserved. Made with 🤍 by lilamaris