본문 바로가기
알고리즘

[BOJ-2559] Python 수열 / 실버3

by 돌맹96 2023. 7. 27.
728x90
반응형

2559번: 수열 (acmicpc.net)

 

2559번: 수열

첫째 줄에는 두 개의 정수 N과 K가 한 개의 공백을 사이에 두고 순서대로 주어진다. 첫 번째 정수 N은 온도를 측정한 전체 날짜의 수이다. N은 2 이상 100,000 이하이다. 두 번째 정수 K는 합을 구하기

www.acmicpc.net

솔루션

이 문제는 이중포문을 쓰면 안된다. 그럼 어떻게 구현을 하는가? 포문을 한번만쓰고 구현하면된다. 다른 좋은 방식이 있을 수도 있다. 저자의 방식을 소개하겠다. 예제 1번은 K = 2일때 두개를 거치고 result 배열에 저장하고 i = 3이면 0 + 1 + 2로 되니 0을 빼줘야한다. 이걸 식으로 나타내면 i - K 번째 수를 빼주면 0이 제외되고 1+2의 값이 result 배열에 들어갈것이다. 글로만 설명하면 이해하기 어려울 수 있으니 그림으로 설명을 한번 더 해보겠다.

 

result = []
K = 2
list = [3,1,2,4]
sum = 0
// for i가 0일때
sum += list[0]
// for i 가 1일때
sum += list[0] + list[1] -> result에 저장
// for i 가 2일때
sum += list[0] + list[1] + list[2] -> list[0]을 제외하고 result에 저장
sum += list[i] - list[i-K] -> 이렇게 되면 list[0]을 제외하게된다.

Code

n, k = map(int , input().split())
temp_list = list(map(int, input().split()))
sum_list = []
sum_ = 0
for i in range(len(temp_list)):
    sum_ += temp_list[i]
    if(i == k-1):
        sum_list.append(sum_)
    if(i >= k):
        sum_ -= temp_list[i-k]
        sum_list.append(sum_)
    
    
print(max(sum_list))
728x90
반응형