[파이썬] 백준 BOJ 11659번 구간 합 구하기 4

강준호·2023년 5월 31일
0

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

초고

import sys
n,m =map(int,sys.stdin.readline().split(" "))
num = [0] + list(map(int, sys.stdin.readline().split()))
for _ in range(m):
    sum = 0
    start,end = map(int,sys.stdin.readline().split(" "))
    for i in range(start,end+1):
        sum += num[i]
    print(sum)

시간초과.. 깡으로 더하면 안될거같다.

2트

import sys
n,m =map(int,sys.stdin.readline().split(" "))
num = [0] + list(map(int, sys.stdin.readline().split()))
dp = [0]*100001
for i in range(1,n+1):
    dp[i] = num[i]+ dp[i-1]
for _ in range(m):
    sum = 0
    start,end = map(int,sys.stdin.readline().split(" "))
    print(dp[end] - dp[start-1])

미리 합을 다 구해놓고, 앞에서 빼는게 시간 효율적!

좀더 개선된 코드

import sys
n,m =map(int,sys.stdin.readline().split(" "))
num = [0] + list(map(int, sys.stdin.readline().split()))
dp = [0]*(n+1)
for i in range(1,n+1):
    dp[i] = num[i]+ dp[i-1]
for _ in range(m):
    start,end = map(int,sys.stdin.readline().split(" "))
    print(dp[end] - dp[start-1])

배열을 크기를 (n+1) 로 바꿨다.

0개의 댓글