[BOJ][๐ŸŸก5][๋ฐฑ์ค€#05549] ํ–‰์„ฑ ํƒ์‚ฌ

์ž‘์„ฑ:    

์—…๋ฐ์ดํŠธ:

์นดํ…Œ๊ณ ๋ฆฌ:

ํƒœ๊ทธ: , , ,

๋ฌธ์ œ ์ถœ์ฒ˜

BAEKJOON Online Judge #5549


๋ฌธ์ œ

์ƒ๊ทผ์ด๋Š” ์šฐ์ฃผ์„ ์„ ํƒ€๊ณ  ์ธ๊ฐ„์ด ๊ฑฐ์ฃผํ•  ์ˆ˜ ์žˆ๋Š” ํ–‰์„ฑ์„ ์ฐพ๊ณ  ์žˆ๋‹ค. ๋งˆ์นจ๋‚ด, ์ „ ์„ธ๊ณ„ ์ตœ์ดˆ๋กœ ์ธ๊ฐ„์ด ๊ฑฐ์ฃผํ•  ์ˆ˜ ์žˆ๋Š” ํ–‰์„ฑ์„ ์ฐพ์•˜๋‹ค. ์ด ํ–‰์„ฑ์€ ์ •๊ธ€, ๋ฐ”๋‹ค, ์–ผ์Œ์ด ๋’ค์–ฝํžŒ ํ–‰์„ฑ์ด๋‹ค. ์ƒ๊ทผ์ด๋Š” ์ด ํ–‰์„ฑ์—์„œ ๊ฑฐ์ฃผ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์—ญ์˜ ์ง€๋„๋ฅผ ๋งŒ๋“ค์–ด ์ง€๊ตฌ๋กœ ๋ณด๋ƒˆ๋‹ค. ์ƒ๊ทผ์ด๊ฐ€ ๋ณด๋‚ด์˜จ ์ง€๋„๋Š” ๊ฐ€๋กœ Ncm, ์„ธ๋กœ Mcm ์ง์‚ฌ๊ฐํ˜• ๋ชจ์–‘์ด๋‹ค. ์ง€๋„๋Š” 1cm ํฌ๊ธฐ์˜ ์ •์‚ฌ๊ฐํ˜•์œผ๋กœ ๋‚˜๋ˆ„์–ด์ ธ ์žˆ๊ณ , ๊ฐ ๊ตฌ์—ญ์˜ ์ง€ํ˜•์ด ์•ŒํŒŒ๋ฒณ์œผ๋กœ ํ‘œ์‹œ๋˜์–ด ์žˆ๋‹ค. ์ง€ํ˜•์€ ์ •๊ธ€, ๋ฐ”๋‹ค, ์–ผ์Œ ์ค‘ ํ•˜๋‚˜์ด๋ฉฐ, ์ •๊ธ€์€ J, ๋ฐ”๋‹ค๋Š” O, ์–ผ์Œ์€ I๋กœ ํ‘œ์‹œ๋˜์–ด ์žˆ๋‹ค. ์ง€๊ตฌ์— ์žˆ๋Š” ์ •์ธ์ด๋Š” ์กฐ์‚ฌ ๋Œ€์ƒ ์˜์—ญ์„ K๊ฐœ ๋งŒ๋“ค์—ˆ๋‹ค. ์ด๋•Œ, ๊ฐ ์˜์—ญ์— ์ •๊ธ€, ๋ฐ”๋‹ค, ์–ผ์Œ์ด ๊ฐ๊ฐ ๋ช‡ ๊ฐœ์”ฉ ์žˆ๋Š”์ง€ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.


์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์ง€๋„์˜ ํฌ๊ธฐ M๊ณผ N์ด ์ฃผ์–ด์ง„๋‹ค. (1 โ‰ค M, N โ‰ค 1000) ๋‘˜์งธ ์ค„์— ์ •์ธ์ด๊ฐ€ ๋งŒ๋“  ์กฐ์‚ฌ ๋Œ€์ƒ ์˜์—ญ์˜ ๊ฐœ์ˆ˜ K๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 โ‰ค K โ‰ค 100000) ์…‹์งธ ์ค„๋ถ€ํ„ฐ M๊ฐœ ์ค„์—๋Š” ์ƒ๊ทผ์ด๊ฐ€ ๋ณด๋‚ธ ์ง€๋„์˜ ๋‚ด์šฉ์ด ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ K๊ฐœ ์ค„์—๋Š” ์กฐ์‚ฌ ๋Œ€์ƒ ์˜์—ญ์˜ ์ •๋ณด๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ •๋ณด๋Š” ๋„ค ์ •์ˆ˜ a b c d๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. ๊ตฌ์—ญ์€ ์ง์‚ฌ๊ฐํ˜• ๋ชจ์–‘ ์ด๋ฉฐ, ์™ผ์ชฝ ์œ„ ๋ชจ์„œ๋ฆฌ์˜ ์ขŒํ‘œ๊ฐ€ (a, b) ์˜ค๋ฅธ์ชฝ ์•„๋ž˜ ๋ชจ์„œ๋ฆฌ์˜ ์ขŒํ‘œ๊ฐ€ (c, d)์ด๋‹ค.


์ถœ๋ ฅ

๊ฐ ์กฐ์‚ฌ ๋Œ€์ƒ ์˜์—ญ์— ํฌํ•จ๋˜์–ด ์žˆ๋Š” ์ •๊ธ€, ๋ฐ”๋‹ค, ์–ผ์Œ์˜ ์ˆ˜๋ฅผ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•ด ํ•œ ์ค„์— ํ•œ ์ •๋ณด์”ฉ ์ถœ๋ ฅํ•œ๋‹ค.


์˜ˆ์ œ

์ž…๋ ฅ

4 7
4
JIOJOIJ
IOJOIJO
JOIJOOI
OOJJIJO
3 5 4 7
2 2 3 6
2 2 2 2
1 1 4 7


์ถœ๋ ฅ

1 3 2
3 5 2
0 1 0
10 11 7


My Sol

import sys
input = sys.stdin.readline

D = {'J':0, 'O':1, 'I':2}
I, J = map(int, input().split())
K = int(input())
mat = [list(input()) for _ in range(I)]
dp = [[[0]*3 for _ in range(J+1)] for _ in range(I+1)]

for i in range(1, I+1):
    for j in range(1, J+1):
        v = mat[i-1][j-1]
        dp[i][j][D[v]] += 1
        for v1, v2, v3 in (dp[i-1][j], dp[i][j-1], [-k for k in dp[i-1][j-1]]):
            dp[i][j][0] += v1
            dp[i][j][1] += v2
            dp[i][j][2] += v3

for _ in range(K):
    i1, j1, i2, j2 = map(int, input().split())
    ans = [0]*3
    for v1, v2, v3 in (dp[i2][j2], dp[i1-1][j1-1]):
        ans[0] += v1
        ans[1] += v2
        ans[2] += v3
    for v1, v2, v3 in (dp[i1-1][j2], dp[i2][j1-1]):
        ans[0] -= v1
        ans[1] -= v2
        ans[2] -= v3

    print(*ans)
  1. DP๋ฅผ ์‚ฌ์šฉํ•ด์„œ (1, 1)๋ถ€ํ„ฐ (i, j)๊นŒ์ง€ ๋ˆ„์ ํ•ฉ์„ ๊ฐ ์ขŒํ‘œ์— ๋ฐฐ์—ด๋กœ ์ €์žฅํ•œ๋‹ค.
  2. (i1, j1)๋ถ€ํ„ฐ (i2, j2)๋ฅผ ๊ผญ์ง“์ ์œผ๋กœ ํ•˜๋Š” ์‚ฌ๊ฐํ˜•์€, (1, 1)๋ถ€ํ„ฐ (i2, j2)์˜ ํฐ ์‚ฌ๊ฐํ˜•์—์„œ (1, 1)๋ถ€ํ„ฐ (i-1, j2), (1, 1)๋ถ€ํ„ฐ (i2, j1-1)์„ ๊ผญ์ง“์ ์œผ๋กœ ํ•˜๋Š” ๋‘ ์‚ฌ๊ฐํ˜•์„ ๋บ€ ๊ฒƒ์— (1, 1)๋ถ€ํ„ฐ (i1-1, j1-1)๊นŒ์ง€์˜ ์‚ฌ๊ฐํ˜•์„ ๋‹ค์‹œ ๋”ํ•œ ๊ฒƒ๊ณผ ๊ฐ™๋‹ค.


๊ฒฐ๊ณผ

๋งž์•˜์Šต๋‹ˆ๋‹ค!!

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ