본문 바로가기
BOJ

백준(BOJ) 5549 행성 탐사(Python)

by juLeena 2023. 4. 20.

문제 내용.

 

누적 합 문제.

2차원 누적 합을 정글, 바다, 얼음에 대해 각각 만들고 값을 출력하면 된다.

계산하기 쉽도록 0으로 이루어진 행과 열을 각각 0번째로 두고 풀었다.

 

코드는 다음과 같다.

 

# -*- coding: utf-8 -*-
import sys
from collections import deque
import heapq
import bisect
import math
from itertools import product
from itertools import combinations
"""
from itertools import combinations
from itertools import combinations_with_replacement
from itertools import permutations
import copy
"""
input=sys.stdin.readline
#print=sys.stdout.write
#sys.setrecursionlimit(100000000)

n,m=map(int,input().split())
k=int(input())
L=[list(input().rstrip()) for i in range(n)]

J=[[0]*(m+1) for i in range(n+1)]
O=[[0]*(m+1) for i in range(n+1)]
I=[[0]*(m+1) for i in range(n+1)]

for i in range(1,n+1):
    for j in range(1,m+1):
        if L[i-1][j-1]=='J':
            J[i][j]=J[i][j-1]+J[i-1][j]-J[i-1][j-1]+1
            O[i][j]=O[i][j-1]+O[i-1][j]-O[i-1][j-1]
            I[i][j]=I[i][j-1]+I[i-1][j]-I[i-1][j-1]
        elif L[i-1][j-1]=='O':
            J[i][j]=J[i][j-1]+J[i-1][j]-J[i-1][j-1]
            O[i][j]=O[i][j-1]+O[i-1][j]-O[i-1][j-1]+1
            I[i][j]=I[i][j-1]+I[i-1][j]-I[i-1][j-1]
        else:
            J[i][j]=J[i][j-1]+J[i-1][j]-J[i-1][j-1]
            O[i][j]=O[i][j-1]+O[i-1][j]-O[i-1][j-1]
            I[i][j]=I[i][j-1]+I[i-1][j]-I[i-1][j-1]+1

for i in range(k):
    x1,y1,x2,y2=map(int,input().split())
    print(J[x2][y2]-J[x2][y1-1]-J[x1-1][y2]+J[x1-1][y1-1],
          O[x2][y2]-O[x2][y1-1]-O[x1-1][y2]+O[x1-1][y1-1],
          I[x2][y2]-I[x2][y1-1]-I[x1-1][y2]+I[x1-1][y1-1])

아주 스탠다드한 2차원 누적 합 문제.