<문제>
https://www.acmicpc.net/problem/11659
11659번: 구간 합 구하기 4
첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다. 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j
www.acmicpc.net
<시간 복잡도>
우선 이문제는 일반적인 for 문을 이용해서 풀으면 시간 초과의 문제가 나오게 된다.
아마 n^2의 시간 복잡도 때문이라고 생각한다. python이 1초에 몇 만번인지는 기억이 안나지만 그만큼 연산을 하기 때문에
<코드>
import sys
n, m = map(int, sys.stdin.readline().split())
num_list = [0]+list(map(int,sys.stdin.readline().split()))
dp = [0]* 100001
for i in range(1,len(num_list)):
dp[i] = num_list[i] + dp[i-1]
for _ in range(m):
x,y = map(int,sys.stdin.readline().split())
print(dp[y]-dp[x-1])
<해설>
아무튼 이문제를 풀기 위해서는 dp 를 이용해야 한다. 그중 메모지 에이션을 이용해서 풀어야 풀 수 있다.
dp 로 누적 합을 저장한다. 예를 들어
1,2,3,4 의 배열이 들어온다면
dp에 dp =[ 1, 1+2, 1+2+3, 1+2+3+4]를 저장해주면 된다.
끝
참고로 이문제는
https://zoozoozoo.tistory.com/566
[백준] 11660번 구간 합 구하기 5 - python
<문제> https://www.acmicpc.net/problem/11660 11660번: 구간 합 구하기 5 첫째 줄에 표의 크기 N과 합을 구해야 하는 횟수 M이 주어진다. (1 ≤ N ≤ 1024, 1 ≤ M ≤ 100,000) 둘째 줄부터 N개의 줄에는 표에..
zoozoozoo.tistory.com
이 문제를 푸는데 도움이 된다.
반응형
'알고리즘 공부 > 기타' 카테고리의 다른 글
[백준] 11478번 서로 다른 부분 문자열의 개수 - python (0) | 2022.06.20 |
---|---|
[백준] 1874번 스택 수열- python (0) | 2022.06.17 |
[프로그래머스] 영어 끝말잇기 - python (0) | 2022.06.07 |
LIS(Longest Incresing Sequence) - 최장 증가 수열 (0) | 2022.04.14 |
[백준] 11286번 절댓값 힙- 파이썬 (0) | 2022.03.05 |