아 나는 확실히 PS를 잘 못 풀고 있었던 것일까?
아니면 시간을 들였기 때문에 이제야 문제 푸는 느낌나게 푸는건가? 이제야 뭔가 로직이 로직답게 만들어지는 것 같다.
0) 문제 정의
n개의 문자 배열 중에
i , j 받았을 때 i~j 범위의 문자 배열 값들의 합
1) DP테이블 정의
dp[n]은 n까지의 num들의 합
dp[j] = dp[j-1] + num[j]
2) 점화식 구하기
보통 순차적인 합이 있을 때, 특히 DP테이블의 누적 합이므로
dp [j] ~ dp[i] = dp[j] - dp[i-1]
3) 초기값
dp[0] = 0으로 해주고, num에 따라서 합을 누적해서 넣어서 dp테이블 채우기.
/ 첫 번째 제출 /
import sys
input = sys.stdin.readline
n, m = map(int, input().split())
num = list(map(int, input().split()))
dp = [0] * n
for i in range(n):
dp[i] = dp[i-1]+num[i]
for i in range(m):
i, j = map(int, input().split())
i = i - 1
j = j - 1
if i - 1 >= 0:
print(dp[j] - dp[i-1])
else:
print(dp[j])
'CodingTest > Baekjun Online Judge' 카테고리의 다른 글
[ BOJ / 파이썬 ] 1012 유기농 배추 (0) | 2022.08.06 |
---|---|
[ BOJ / 파이썬 ] 1912 연속합 (0) | 2022.08.06 |
[ BOJ / 파이썬 ] 11726 2xn 타일링 (0) | 2022.08.03 |
[ BOJ / 파이썬 ] 1149 RGB거리 (0) | 2022.08.03 |
[ BOJ / 파이썬] 2579 계단 오르기 (0) | 2022.08.03 |