나의 개발일지

[백준] 5549 행성 탐사 [Python, 파이썬] 본문

백준

[백준] 5549 행성 탐사 [Python, 파이썬]

YoonJuHan 2023. 11. 30. 15:43
  • 문제 : https://www.acmicpc.net/problem/5549
  • 🔑 누적합
    • 정글, 바다, 얼음의 누적합을 구할  2차원 리스트 3개를 만든다.
    • 지도를 순회하면서 누적합을 구한다.
    • 구한 누적합 리스트를 통해 조사를 해서 정글, 바다, 얼음의 수를 구하면 끝 ✨

 

import sys
input = sys.stdin.readline

m, n = map(int, input().split())
k = int(input())

MAP = [list(input().strip()) for i in range(m)]

J = [[0] * (n+1) for _ in range(m+1)]   # 정글
O = [[0] * (n+1) for _ in range(m+1)]   # 바다
I = [[0] * (n+1) for _ in range(m+1)]   # 얼음

for i in range(1, m+1):     # 누적합
    for j in range(1, n+1):
        if MAP[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 MAP[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 _ in range(k):
    x1, y1, x2, y2 = map(int, input().split())

    j = J[x2][y2]-J[x2][y1-1]-J[x1-1][y2]+J[x1-1][y1-1]
    o = O[x2][y2]-O[x2][y1-1]-O[x1-1][y2]+O[x1-1][y1-1]
    i = I[x2][y2]-I[x2][y1-1]-I[x1-1][y2]+I[x1-1][y1-1]
    
    print(j, o, i)
Comments