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

arr = list(map(int,input().split()))

if max(arr) == 0:
    print('SAD')
else:
    value = sum(arr[:X])

    max_value = value
    max_cnt = 1

    for i in range(X,N):
        value += arr[i]
        value -= arr[i-X]
        if value > max_value:
            max_value = value
            max_cnt = 1
        elif value == max_value:
            max_cnt += 1

    print(max_value)
    print(max_cnt)        


        

범위 내의 최대 누적자수를 구하면 되는 문제이다.

 

그래서 나는 슬라이딩 윈도우를 이용해 X의 크기만큼의 첫 방문자수를 구한뒤 한칸씩 이동하면서 더해주고 빼주는 작업을 반복했다.

 

그리고 값이 갱신되면 1로 초기화를 해주고, 그렇지 않고 최대값과 같은 값이 나왔을때는 더해주는 방식으로 풀 수 있었다.

'알고리즘 > 백준' 카테고리의 다른 글

[BOJ/백준] 21923 곡예비행  (0) 2021.06.10
[BOJ/백준] 21922 학부 연구생 민상  (0) 2021.06.10
[BOJ/백준] 21920 서로소 평균  (0) 2021.06.10
[BOJ/백준] 21919 소수 최소 공배수  (0) 2021.06.10
[BOJ/백준] 21918 전구  (0) 2021.06.10

+ Recent posts