코드
# 특정 배열에서 고정된 크기의 부분 배열을 처리 -> 슬라이딩 윈도우
n,m = map(int, input().split())
num_lst = [*map(int,input().split())]
visited = sum(num_lst[:m]) # 연속된 날짜의 합 구하기(매일 변하는 값)
res = visited # 결과를 저장할 값 (조건을 만족할 때마다 변하는 값)
s = 0
days = 1
for i in range(m,n):
temp = visited + num_lst[i] -num_lst[s] # 전날을 빼고 그 다음 날을 넣은 값
if temp > res:
res = temp
days = 1
elif temp == res:
days += 1
s+=1 # 다음날로
visited = temp
if res:print(res, days, sep='\n')
else: print("SAD")
슬라이딩 윈도우라는 알고리즘을 처음 접한 문제였다. 매번 값 전부를 더해주는 것이 아니라 첫 번째 값을 빼고 마지막에 값을 하나 더하는 방식이기 때문에 시간 복잡도가 줄어든다는 것을 알았다.
'백준' 카테고리의 다른 글
[백준] 2343번 기타 레슨 파이썬 코드 (0) | 2024.03.06 |
---|---|
[백준] 12891번 DNA 비밀번호 파이썬 코드 (1) | 2024.03.05 |
[백준] 2559번 수열 파이썬 코드 (0) | 2024.03.04 |
[백준] 11660번 구간 합 구하기 5 파이썬 코드 (0) | 2024.03.04 |
[백준] 15900번 나무 탈출 파이썬 코드 (0) | 2024.03.03 |