46 lines
1.4 KiB
Python
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 출력(처음에 이거 안해서 틀림), 아니면 최대값과 그 개수를 출력한다.
|
|
""" |