728x90
[백준] 2559번 Python 파이썬
https://www.acmicpc.net/problem/2559
< 시간 초과 코드 >
아래의 코드는 O(nk)의 시간 복잡도를 갖기 때문에 n과 k의 크기가 클 경우 오랜 시간이 걸린다.
import sys
n, k = map(int, sys.stdin.readline().split())
tp = list(map(int, sys.stdin.readline().split()))
lt = [[0] for i in range(n - k + 1)]
for i in range(n - k + 1):
lt[i] = sum(tp[i:i+k])
print(max(lt))
< 성공한 코드 >
아래의 코드는 누적합(Prefix Sum)을 이용하여 입력된 리스트 tp를 한 번만 반복하고,
각 요소마다 상수 시간 연산을 수행하기 때문에시간복잡도 O(n)을 갖는다.
import sys
n, k = map(int, sys.stdin.readline().split())
tp = list(map(int, sys.stdin.readline().split()))
lt = [0]*(n - k + 1)
lt[0] = sum(tp[:k])
for i in range(1, n - k + 1):
lt[i] = lt[i-1] - tp[i-1] + tp[i+k-1]
print(max(lt))
혼자 공부하며 올리는 블로그입니다. 틀린 내용은 댓글 남겨주시면 감사하겠습니다.
'BAEKJOON (Python) > Prefix Sum Algorithm' 카테고리의 다른 글
BAEKJOON_2851 "슈퍼 마리오" PYTHON (0) | 2023.04.01 |
---|---|
BAEKJOON_2167 "2차원 배열의 합" PYTHON (0) | 2023.03.30 |
BAEKJOON_11660 "구간 합 구하기 5" PYTHON (0) | 2023.03.29 |
BAEKJOON_11659 "구간 합 구하기 4" PYTHON (0) | 2023.03.23 |