BAEKJOON_11660 “구간합 구하기 5” PYTHON

(백준) 11660호 파이썬 파이썬

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

11660: 섹션 5의 합계 결정

첫 번째 줄은 테이블의 크기 N과 계산할 합계의 수 M을 나타냅니다. (1 ≤ N ≤ 1024, 1 ≤ M ≤ 100,000) 두 번째 행부터 N행까지 표에 입력된 숫자는 첫 번째 행부터 순서대로 주어진다. 다음 M 라인에서 예

www.acmicpc.net



입력 값 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)

많은 수정 끝에 해결했습니다.


제가 직접 공부하고 포스팅하는 블로그입니다. 잘못된 것이 있으면 주저하지 말고 의견을 남겨주세요.