728x90

http://wwww.acmicpc.net/problem/11659

 

# 조건

  • 수 N개가 주어졌을 때, i번째 수부터 j번째 수까지 합을 구하는 프로그램 작성하시오
  • 첫 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다.
  • 둘쨰 줄에는 N개의 수가 주어진다.ㅣ
  • 수는 1,000보다 작거나 같은 자연수
  • 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j가 주어진다.
 

# 접근 방법

  • slicing을 통하여 합을 구해주면 된다.
  • 이 때, slicing의 시작 구간 -1을 해주어야 한다.

위와 같이 하면 시간초과

 

  • 따라서 누적합을 구해준다.
  • 즉, 처음에 한 번 누적합 리스트를 구해준 후 B까지의 합에서 A-1까지의 합을 빼준다.
import sys  
  
N, M = map(int, sys.stdin.readline().split())  
nums = [0] + list(map(int, sys.stdin.readline().split()))  
  
for i in range(1, len(nums)):  
    nums[i] += nums[i-1]  
  
for _ in range(M):  
    A, B = map(int, sys.stdin.readline().split())  
    print(nums[B] - nums[A - 1])
728x90