매일 아침 9시에 학교에서 측정한 온도가 어떤 정수의 수열로 주어졌을 때, 연속적인 며칠 동안의 온도의 합이 가장 큰 값을 알아보고자 한다.

예를 들어, 아래와 같이 10일 간의 온도가 주어졌을 때, 

3 -2 -4 -9 0 3 7 13 8 -3

모든 연속적인 이틀간의 온도의 합은 아래와 같다.

이때, 온도의 합이 가장 큰 값은 21이다. 

또 다른 예로 위와 같은 온도가 주어졌을 때, 모든 연속적인 5일 간의 온도의 합은 아래와 같으며, 

이때, 온도의 합이 가장 큰 값은 31이다.

매일 측정한 온도가 정수의 수열로 주어졌을 때, 연속적인 며칠 동안의 온도의 합이 가장 큰 값을 계산하는 프로그램을 작성하시오. 

입력

첫째 줄에는 두 개의 정수 N과 K가 한 개의 공백을 사이에 두고 순서대로 주어진다. 첫 번째 정수 N은 온도를 측정한 전체 날짜의 수이다. N은 2 이상 100,000 이하이다. 두 번째 정수 K는 합을 구하기 위한 연속적인 날짜의 수이다. K는 1과 N 사이의 정수이다. 둘째 줄에는 매일 측정한 온도를 나타내는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 수들은 모두 -100 이상 100 이하이다. 

출력

첫째 줄에는 입력되는 온도의 수열에서 연속적인 K일의 온도의 합이 최대가 되는 값을 출력한다.

예제 입력 1 복사

10 2
3 -2 -4 -9 0 3 7 13 8 -3

예제 출력 1 복사

21

예제 입력 2 복사

10 5
3 -2 -4 -9 0 3 7 13 8 -3

예제 출력 2 복사

31

 

 

 

 

시간초과

연속적인 며칠동안의 온도의 합이 가장 큰지 알아봄

연속된 수열에서 합이 제일 큰것 찾기
반복문 돌면서 1개에서 k개까지 잘라보면서 탐색
k가 가변적이지 않는다.
그냐 반복문 돌면서 k개만큼 자르고,,

10 2      <--- n 온도 측정 전체 날짜수, k 합을 구하기 위한 연속적 날짜 수
3 -2 -4 -9 0 3 7 13 8 -3

#시간초과
n, k = map(int, input().split())
num_list = list(map(int, input().split()))
max_num = 0
for i in range(len(num_list)) :
    cut = sum(num_list[i:i+k])
    if max_num < cut :
        max_num = cut

print(max_num)

 

누적합 이용 -> 성공

N : 1~10만
K : 1~10만
온도 -100~100
연속 온도의 합잉 "최대" 되는 구간 : 구간합
prefix sum, psum[i] = psum[i-1] + a[i]


처음에 선언해줄때만 sum을 이용하고, 
for문을 돌면서 부분합을 맨앞값을 빼주고 맨뒷값을 더해주는(?) 식

n, k = map(int, input().split())
num_list = list(map(int, input().split()))
max_list = []

part_sum = sum(num_list[:k])       #초기 부분 수열 구하기
max_list.append(part_sum)          #리스트에 저장하기

for i in range(len(num_list)-k) :
    #기존에 만든 부분 수열의 합 - 앞에 숫자[i] + 다음 숫자[i+k]
    part_sum = (part_sum - num_list[i]) + num_list[i+k]
    max_list.append(part_sum)


print(max(max_list))
[백준 | 실버3] 2559_수열(누적합, 구간합)