반응형
https://www.acmicpc.net/problem/2559
문제 설명
그림과 함께 제공되는 문제이니 자세한 문제설명은 위 링크를 참조해주세요.
풀이 과정
이 문제는 누적 합 으로 푸는 문제이다.
누적합을 이용하지 않고 단순 합계를 이용한다면 시간초과 오류가 나게 된다.
한번 구간합을 구하는 시간복잡도는 O(n)이고 m번동안 수행을 하게 된다면
총 시간복잡도는 O(nm)이 되는데 데이터가 10만개가 되면 시간초과 오류가 나게 된다.
그래서 매번 구간합을 구하는 것이 아니라,
처음에 n개의 수를 입력받고 나면
길이 n짜리 리스트를 만들어 리스트의 각 자리에 그 자리까지의 누적합을 저장한 후에
각 자리의 누적합에서 빼주는 방식으로 구간합을 구하면 된다.
이를 파이썬으로 나타낸 코드는 다음과 같다.
import sys
input = sys.stdin.readline
n, m = map(int, input().split())
nums = list(map(int, input().split()))
pre = [0]
tmp_sum = []
mysum = 0
for i in range(n):
mysum += nums[i]
pre.append(mysum)
for i in range(n-m+1):
tmp_sum.append(pre[i+m] - pre[i])
print(max(tmp_sum))
전체 문제 & 코드는 위의 깃에 정리되어 있습니다.
팔로우 & 맞팔은 환영입니다 !
반응형
'Algorithm > Implementation' 카테고리의 다른 글
[백준] 16139 인간 (Python 파이썬) (2) | 2022.08.11 |
---|---|
[백준] 11659 구간 합 구하기4 (Python 파이썬) (0) | 2022.05.17 |
[백준] 17478 재귀함수가 뭔가요? (Python 파이썬) (0) | 2022.05.14 |
[Codility]GenomicRangeQuery (Python, Kotlin) (0) | 2021.11.20 |
[백준] 20057 마법사 상어와 토네이도 (Python 파이썬) (0) | 2021.10.24 |