파이썬/코딩테스트

[Do-it 코딩 테스트] 003. 구간 합 구하기1(11659)

거북이07 2023. 10. 26. 17:22

문제

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

 

11659번: 구간 합 구하기 4

첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다. 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j

www.acmicpc.net


코드

내가 작성한 코드

import sys
input = sys.stdin.readline
data, qnum = map(int, input().split())
arr = list(map(int, input().split()))
sumArr = [0]
sum = 0
# 합배열 만들기
for i in arr:
    sum += i
    sumArr.append(sum)

for i in range(qnum):
    start, end = map(int, input().split())
    print(sumArr[end] - sumArr[start - 1])

해석

data, qnum = map(int, input().split())
arr = list(map(int, input().split()))

data에 데이터의 개수, qnum에 질의 개수를 입력받아 넣어주고 이전 문제들과 동일하게 공백을 기준으로 슬라이스해주고 map()을 이용하여 문자열을 정수로 변경해주었다.

 

arr에는 구간 합을 구할 배열을 입력받아 넣어주고 문자열을 정수로 변경 후 다시 리스트에 넣어주었다.

sumArr = [0]
sum = 0

합이 들어갈 리스트와 합을 담아줄 변수를 미리 선언해주었다.

# 합배열 만들기
for i in arr:
    sum += i
    sumArr.append(sum)

아래 이미지처럼 원본 배열  반복문을 이용하여 arr에 들어있는 값을 i에 담아 미리 선언해준 sum 변수에 i(arr 값)를 더해준 후 sumArr 리스트에 sum(합)을 넣어주었다.

for i in range(qnum):
    start, end = map(int, input().split())
    print(sumArr[end] - sumArr[start - 1])

 

예를 들어 2번째부터 4번째 숫자까지의 합을 구하라고 하였을 때 위 이미지를 보면 1번째에서 4번째까지의 합이 14라고 나와있다. 우리는 1번째가 아닌 2번째부터 4번째까지의 합을 구하고 싶으니까 4번째 합에서 1번째 합을 빼주어야 우리가 원하는 값을 얻어낼 수 있다.

 

구간합 공식 sumArr[end] - sumArr[start - 1]

 

이렇게 해서 얻어낸 값을 print()함수에 넣어 출력해주면 문제가 해결된다.