구간 합 예제 - 1
문제 분석
수의 개수와 질의의 개수는 최대 100,000이다.
구간마다 합을 매번 계산하면 시간 제한(
0.5초)안에 절대 끝낼 수 없다.매번 계산한다면 최대
100,000^2정도의 연사을 수행한다.
구간 합을 사용해야 한다.
손으로 풀어보기
N개의 수를 입력받으면서 동시에 합 배열을 생성한다.구간
i~j가 주어지면 구간 합을 구하는 공식으로 정답을 출력한다.
슈도코드
n(숫자 개수), m(질의 개수)
numbers 변수에 숫자 데이터 저장
sumList 합 배열 변수 선언
temp 변수 선언
for numbers 데이터 차례대로 검색:
temp에 현재 숫자 누적
합 배열에 temp값 저장
for 질의 개수 만큼:
질의 범위 받기(start ~ end)
구간 합 출력하기(sumList[end] - sumList[start-1]코드 구현
import sys
input = sys.stdin.readline
n, m = map(int, input().split())
numbers = list(map(int, input().split()))
sumList = [0]
temp = 0
str_list = []
for i in numbers:
temp += i
sumList.append(temp)
for i in range(m):
start, end = map(int, input().split())
str_list.append(str(sumList[end] - sumList[start - 1]))
result = "\n".join(str_list)
print(result)리스트와
.join()은 자바의StringBuilder같은 역할을 한다.
Last updated