본문 바로가기
Coding Test/Problems

[BOJ | Python] 21921번: 블로그

by haerr 2025. 7. 17.

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

 

문제

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

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

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

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

 

입력

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

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

 

출력

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

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

 

풀이

N, X = map(int, input().split())
visit = list(map(int, input().split()))
prefix, period = 0, 1

for i in range(N):
    if i < X:
        prefix += visit[i]
        max_visit = prefix
    else:
        prefix = prefix - visit[i - X] + visit[i]
        if max_visit < prefix:
            max_visit = prefix
            period = 1
        elif max_visit == prefix:
            period += 1

print("SAD" if not max_visit else f"{max_visit}\n{period}")

 

1. N, X와 visit을 입력받는다

2. 구간합과 기간을 저장할 prefix, period를 0과 1로 초기화한다.

 

사진 출처: https://coder-areum.tistory.com/19

3. 위 사진처럼 반복문으로 특정 구간합을 prefix에 저장하고 확인한다. 아직 구간의 길이가 X보다 작을 때는 값을 더해주기만 한다. (첫 if문)

4. 구간의 길이가 X이면, 계속해서 prefix를 갱신하며 최대 조회수와 비교하고 최댓값을 저장한다.

5. 값을 출력한다.