https://www.acmicpc.net/problem/11660
11660번: 구간 합 구하기 5
첫째 줄에 표의 크기 N과 합을 구해야 하는 횟수 M이 주어진다. (1 ≤ N ≤ 1024, 1 ≤ M ≤ 100,000) 둘째 줄부터 N개의 줄에는 표에 채워져 있는 수가 1행부터 차례대로 주어진다. 다음 M개의 줄에는 네
www.acmicpc.net
import sys
input = sys.stdin.readline
n,m = map(int,input().split()) # 크기와 횟수
maps = [list(map(int, input().split())) for _ in range(n)]
qus = [list(map(int,input().split())) for _ in range(m)]
#print(maps)
for i in range(n):
for j in range(n):
if j :
maps[i][j] += maps[i][j-1]
#print(qus)
#print(maps)
for i in range(m):
sums = 0
for j in range(qus[i][0]-1,qus[i][2]):
if qus[i][1] == 1:
sums += maps[j][qus[i][3]-1]
else:
sums += maps[j][qus[i][3]-1] - maps[j][qus[i][1]-2]
print(sums)
구간합을 단순히 for 문으로 돌렸다. python은 시간초과가 나서 pypy로 돌려서 성공했다.
생각나는 다른 방법으로는 구간을 나눠서 가장 큰 범위 - 양 옆 2개 범위 + 겹치는 범위로 구하면 될거 같다.
'백준 문제 풀이 및 피드백' 카테고리의 다른 글
23.03.11 패션왕 신해빈 [PYTHON] (0) | 2023.03.11 |
---|---|
23.01.29 정수삼각형 백준 [파이썬] (0) | 2023.01.29 |
2023.01.29 RGB거리 백준[파이썬] (0) | 2023.01.29 |
2023.01.28 예산 백준[파이썬] (0) | 2023.01.28 |
2023.01.28 절댓값 힙 [파이썬] (0) | 2023.01.28 |