728x90
[백준] 11660번 Python 파이썬
https://www.acmicpc.net/problem/11660
입력받은 x1, y1, x2, y2 값은 인덱스와 1씩 차이가 있으므로 입력받은 값에서 1씩 빼주었다.
import sys
n, m = map(int,sys.stdin.readline().split())
tb = [[0 for j in range(n)] for i in range(n)] # n*n의 빈행렬을 만들어준다.
# 행렬의 원소를 입력받아 만들어둔 행렬 tb에 차례로 담아준다.
for i in range(n):
lt = list(map(int, sys.stdin.readline().split()))
for j in range(n):
tb[i][j] = lt[j]
# 누적합을 담기위한 행렬 st를 만들어준다.
st = [[0 for j in range(n)] for i in range(n)]
for문을 이용해 행렬 st에 누적합 값을 넣어준다.
for i in range(n):
for j in range(n):
if i == 0 and j == 0:
st[i][j] = tb[i][j]
elif i == 0:
st[i][j] = st[i][j-1] + tb[i][j]
elif j == 0:
st[i][j] = st[i-1][j] + tb[i][j]
else:
st[i][j] = st[i-1][j] + st[i][j-1] - st[i-1][j-1] + tb[i][j]
answer = []
# 5가지의 경우로 나누어 출력할 값을 구해준다.
for i in range(m):
x1, y1, x2, y2 = map(int, sys.stdin.readline().split())
if x1 == x2 and y1 == y2:
answer.append(tb[x2-1][y2-1])
elif x1 == 1 and y1 == 1:
answer.append(st[x2-1][y2-1])
elif x1 == 1:
answer.append(st[x2-1][y2-1] - st[x2-1][y1-2])
elif y1 == 1:
answer.append(st[x2-1][y2-1] - st[x1-2][y2-1])
else:
answer.append(st[x2-1][y2-1] - st[x1-2][y2-1] - st[x2-1][y1-2] + st[x1-2][y1-2])
for i in answer:
print(i)
정말 많은 수정 끝에 해결하였다..
혼자 공부하며 올리는 블로그입니다. 틀린 내용은 댓글 남겨주시면 감사하겠습니다.
'BAEKJOON (Python) > Prefix Sum Algorithm' 카테고리의 다른 글
BAEKJOON_2851 "슈퍼 마리오" PYTHON (0) | 2023.04.01 |
---|---|
BAEKJOON_2559 "수열" PYTHON (0) | 2023.03.31 |
BAEKJOON_2167 "2차원 배열의 합" PYTHON (0) | 2023.03.30 |
BAEKJOON_11659 "구간 합 구하기 4" PYTHON (0) | 2023.03.23 |