Files
baekjoon-study/workbook_8708/silver/21921-s3.py
2026-02-23 11:14:50 +09:00

46 lines
1.4 KiB
Python

# 블로그
import sys
from collections import deque, Counter
input = sys.stdin.readline
def solution():
n, x = map(int, input().rstrip().split())
one_days = list(map(int, input().rstrip().split()))
duration = deque([one_days[i] for i in range(x)])
duration_result = [0] * n
duration_result[x-1] = sum(duration)
for i in range(x, n):
before = duration.popleft()
duration.append(one_days[i])
after = duration[-1]
duration_result[i] = duration_result[i-1] - before + after
c = Counter(duration_result)
max_vistor = max(c)
if max_vistor == 0:
print('SAD')
else:
print(max_vistor)
print(c.get(max_vistor))
return
solution()
"""
걸린 시간: 19분
시간 복잡도: 전체 요소를 한, 두바퀴 정도 돌기 때문에 O(n)이다.
해설: 그냥 인덱스로 앞 뒤로 줄이고, 늘이면 되는데 슬라이딩 윈도우는 deque를 쓰는게 좀 직관적이라서 deque를 사용했다.
최대값과 count를 계속 업데이트 하는 것이 코드가 가독성이 떨어지는 것 같아서 어차피 그렇게 연산하는 것과
마지막에 결과 리스트 한 바퀴 돌면서 개수 세는 연산이 비슷하기 때문에 그냥 결과 리스트에 쭉 저장하고 Counter로 개수를 셌다.
0이 최대일 경우 SAD 출력(처음에 이거 안해서 틀림), 아니면 최대값과 그 개수를 출력한다.
"""