문제
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()함수에 넣어 출력해주면 문제가 해결된다.
'파이썬 > 코딩테스트' 카테고리의 다른 글
[Do-it 코딩 테스트] 006. 연속된 자연수의 합 구하기(2018) (0) | 2023.10.30 |
---|---|
[Do-it 코딩 테스트] 004. 숫자의 합 구하기2(11660) (0) | 2023.10.27 |
[Do-it 코딩 테스트] 002. 평균 구하기(2750) (0) | 2023.10.26 |
[Do-it 코딩 테스트] 001. 숫자의 합 구하기(11720) (1) | 2023.10.26 |
[Do-it 코딩 테스트] 000. 수 정렬하기(2750) (1) | 2023.10.26 |