본문 바로가기
카테고리 없음

bj 구간합구하기5

by alasdkfm 2023. 5. 8.

목차

    내 코드 

    더보기

    # 코드보기

    import sys
    n,m = map(int,sys.stdin.readline().split())
    dp = [ [0] * (n + 1) for _ in range(n + 1)]
    
    numbers = [0]*n
    for i in range(n):
        numbers[i] = list(map(int,sys.stdin.readline().split()))
    
    # 누적 합
    for i in range(1, n + 1):
        for j in range(1, n +1 ):
            dp[i][j] = numbers[i - 1][j - 1] + dp[i - 1][j] + dp[i][j - 1] - dp[i - 1][j - 1] 
           
    for _ in range(m):
        x1,y1,x2,y2 = map(int, sys.stdin.readline().split())
        print(dp[x2][y2] - dp[x1 - 1][y2] - dp[x2][y1 - 1] + dp[x1 - 1][y1 - 1])

    # 접기

     

    다른사람풀이

    - 속도 면에서 내코드보다 조금 더 빠름

    더보기

    # 코드보기

    import sys
    n, m = map(int, input().split())
    dp = [[0 for _ in range(n+1)] for _ in range(n+1)]
    for i in range(1, n+1):
        sumRow = 0
        j = 1
        for num in map(int, sys.stdin.readline().split()):
            dp[i][j] = dp[i-1][j] + sumRow + num
            sumRow += num
            j += 1
           
    for _ in range(m):
        i1, j1, i2, j2 = map(int, sys.stdin.readline().split())
        print(dp[i2][j2] - dp[i2][j1-1] - dp[i1-1][j2] + dp[i1-1][j1-1])

    # 접기