누적 합 문제.
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차원 누적 합 문제.
'BOJ' 카테고리의 다른 글
백준(BOJ) 9466 텀 프로젝트(Python) (0) | 2024.03.21 |
---|---|
백준(BOJ) 2573 빙산(Python) (0) | 2024.03.20 |
백준(BOJ) 27447 주문은 토기입니까?(Python) (0) | 2023.04.19 |
백준(BOJ) 3663 고득점(Python) (0) | 2023.04.19 |
백준(BOJ) 24041 성싶당 밀키트(Python) (0) | 2023.04.18 |