본문 바로가기
프로그래밍/알고리즘 & 자료구조

백준 2559 : 수열 with 파이썬

by Play_With 2024. 1. 29.
반응형

https://www.acmicpc.net/problem/2559

 

2559번: 수열

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

www.acmicpc.net

 

1. sum()을 이용하면 시간복잡도가 O(n)이 되므로 시간초과

n,k=map(int, input().split())
num=list(map(int, input().split()))

maxv=0
for i in range(n):
    tmp=sum(num[i:i+k])   #sum()의 시간복잡도는 O(n)
    maxv=max(maxv, tmp)   #max()의 시간복잡도는 O(n)
    
print(maxv)

 

2. 따라서 투포인터를 이용해 앞의 인덱스를 빼주고, 뒤의 인덱스를 더해주며 each값을 갱신하기

n,k=map(int, input().split())
nums=list(map(int, input().split()))

each=sum(nums[:k])
maxv=each    
for i in range(k,n):
    each+=nums[i]
    each-=nums[i-k]
    maxv=max(maxv, each)
print(maxv)

 

반응형

댓글