알고리즘/문제풀이
[Python] 백준 21921 블로그
정찡이
2021. 11. 27. 21:28
728x90
1. 문제 링크
https://www.acmicpc.net/problem/21921
21921번: 블로그
첫째 줄에 $X$일 동안 가장 많이 들어온 방문자 수를 출력한다. 만약 최대 방문자 수가 0명이라면 SAD를 출력한다. 만약 최대 방문자 수가 0명이 아닌 경우 둘째 줄에 기간이 몇 개 있는지 출력한다
www.acmicpc.net
2. 문제 요약
X일 동안 가장 많이 들어온 방문자 수와 기간이 몇 개 있는가
3. 아이디어 정리
- 누적합을 먼저 구한다.
- 슬라이딩 윈도우로 특정 기간 동안 최대 값인 경우 방문자 수와 기간을 갱신한다.
4. 문제 풀이
4-1. 내 풀이
n, x = map(int, input().split()) # 블로그 일수, x일 동안 가장 많이 들어온 방문자
arr = list(map(int, input().split()))
if max(arr) == 0:
print("SAD")
else:
# prefix 만들기
prefix = [0]
for i, a in enumerate(arr):
prefix.append(prefix[i] + a)
left = 0
right = x
result = 0
count = 0
while right <= n:
if right - left == x:
if result < prefix[right] - prefix[left]:
result = prefix[right] - prefix[left]
count = 1
elif result == prefix[right] - prefix[left]:
count += 1
left += 1
right += 1
print(result)
print(count)
5. 결론
- 슬라이딩 윈도우로 해결