cmod.ify
[11659] 구간 합 구하기 4 본문
728x90
반응형
혹시나 했지만 역시나 시간 초과 풀이
import sys
input = sys.stdin.readline
n,m = map(int, input().split())
nlist = list(map(int, input().split()))
for _ in range(m):
first, second = map(int, input().split())
sum = 0
for i in range(first-1, second):
sum += nlist[i]
print(sum)
시간을 줄일 수 있는 방법이 뭐가 있을까 고민했는데
그냥 절반으로 줄여서 실행해봤다.
이 때 양옆의 값에서부터 가운데로 왔다. 홀수면 가운데 값만 하나 추가해봤다.
이것도 시간초과가 났다 ㅜ
import sys
input = sys.stdin.readline
n,m = map(int, input().split())
nlist = list(map(int, input().split()))
for _ in range(m):
first, second = map(int, input().split())
k = second - first + 1
first -= 1
second -= 1
sum = 0
if k%2 == 0:
for i in range(k//2+1):
sum += nlist[first+i] + nlist[second-i]
else:
for i in range(k//2):
sum += nlist[first+i] + nlist[second-i]
sum += nlist[(first+second)//2]
print(sum)
결국 제미나이의 도움을 받아 누적합 문제라는 것을 알았다.
비슷한 문제 중에 꿀따기라는 문제를 풀었던 것 같았는데..
import sys
input = sys.stdin.readline
n,m = map(int, input().split())
sumList = [0]
sum = 0
nlist = list(map(int, input().split()))
for i in nlist:
sum += i
sumList.append(sum)
for _ in range(m):
first, second = map(int, input().split())
print(sumList[second] - sumList[first-1])
728x90
반응형
'BASIC > 코딩테스트' 카테고리의 다른 글
| [11727] 2×n 타일링 2 (0) | 2025.12.22 |
|---|---|
| [11726] 2×n 타일링 (0) | 2025.12.22 |
| [9375] 패션왕 신해빈 (0) | 2025.12.22 |
| [9095] 1,2,3 더하기 (0) | 2025.12.22 |
| [2579] 계단 오르기 (0) | 2025.12.19 |