본문 바로가기
Dev/Algorithm

[백준] #21921 블로그 - 파이썬

by jusep 2025. 7. 21.

문제

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

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

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

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

입력

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

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

출력

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

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

제한

  •  방문자 수 

예제 입력 1 

5 2
1 4 2 5 1

예제 출력 1 

7
1

예제 입력 2 

7 5
1 1 1 1 1 5 1

예제 출력 2 

9
2

예제 입력 3 

5 3
0 0 0 0 0

예제 출력 3 

S

복기

1. 첫 X일을 먼저 계산을 해주면 loop를 한번더 안 돌려도 된다.

2. max_visit가 갱신되면 max_cnt도 1로 갱신해줘야 한다.


솔루션

N, X = map(int, input().split())
visit = list(map(int, input().split()))

# 첫 X일 합 계산
max_visit = sum(visit[:X])
max_cnt = 1 if max_visit >0 else 0


curr_sum = max_visit
for i in range(1, N - X + 1):
    curr_sum = curr_sum - visit[i - 1] + visit[i + X - 1]
    if curr_sum > max_visit:
        max_visit = curr_sum
        max_cnt = 1
    elif curr_sum == max_visit:
        max_cnt += 1
        

if max_visit>0:
    print(max_visit)
    print(max_cnt)
else:
    print('SAD')

댓글