[BOJ][๐ŸŸก4][๋ฐฑ์ค€#17144] ๋ฏธ์„ธ๋จผ์ง€ ์•ˆ๋…•!

์ž‘์„ฑ:    

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

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

ํƒœ๊ทธ: , , ,

๋ฌธ์ œ ์ถœ์ฒ˜

BAEKJOON Online Judge #17144


๋ฌธ์ œ

๋ฏธ์„ธ๋จผ์ง€๋ฅผ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด ๊ตฌ์‚ฌ๊ณผ๋Š” ๊ณต๊ธฐ์ฒญ์ •๊ธฐ๋ฅผ ์„ค์น˜ํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ๊ณต๊ธฐ์ฒญ์ •๊ธฐ์˜ ์„ฑ๋Šฅ์„ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•ด ๊ตฌ์‚ฌ๊ณผ๋Š” ์ง‘์„ย ํฌ๊ธฐ๊ฐ€ย Rร—C์ธ ๊ฒฉ์žํŒ์œผ๋กœ ๋‚˜ํƒ€๋ƒˆ๊ณ , 1ร—1 ํฌ๊ธฐ์˜ ์นธ์œผ๋กœ ๋‚˜๋ˆด๋‹ค. ๊ตฌ์‚ฌ๊ณผ๋Š” ๋›ฐ์–ด๋‚œย ์ฝ”๋”ฉ ์‹ค๋ ฅ์„ ์ด์šฉํ•ด ๊ฐ ์นธ (r, c)์— ์žˆ๋Š” ๋ฏธ์„ธ๋จผ์ง€์˜ ์–‘์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋Š” ์‹œ์Šคํ…œ์„ ๊ฐœ๋ฐœํ–ˆ๋‹ค. (r, c)๋Š” rํ–‰ c์—ด์„ ์˜๋ฏธํ•œ๋‹ค.

๊ณต๊ธฐ์ฒญ์ •๊ธฐ๋Š” ํ•ญ์ƒ 1๋ฒˆย ์—ด์— ์„ค์น˜๋˜์–ด ์žˆ๊ณ , ํฌ๊ธฐ๋Š” ๋‘ ํ–‰์„ ์ฐจ์ง€ํ•œ๋‹ค. ๊ณต๊ธฐ์ฒญ์ •๊ธฐ๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ์ง€ ์•Š์€ ์นธ์—๋Š” ๋ฏธ์„ธ๋จผ์ง€๊ฐ€ ์žˆ๊ณ , (r, c)์— ์žˆ๋Š” ๋ฏธ์„ธ๋จผ์ง€์˜ ์–‘์€ Ar,c์ด๋‹ค. 1์ดˆ ๋™์•ˆ ์•„๋ž˜ ์ ํžŒ ์ผ์ด ์ˆœ์„œ๋Œ€๋กœ ์ผ์–ด๋‚œ๋‹ค.

๋ฏธ์„ธ๋จผ์ง€๊ฐ€ ํ™•์‚ฐ๋œ๋‹ค. ํ™•์‚ฐ์€ ๋ฏธ์„ธ๋จผ์ง€๊ฐ€ ์žˆ๋Š” ๋ชจ๋“  ์นธ์—์„œ ๋™์‹œ์— ์ผ์–ด๋‚œ๋‹ค.

(r, c)์— ์žˆ๋Š” ๋ฏธ์„ธ๋จผ์ง€๋Š” ์ธ์ ‘ํ•œ ๋„ค ๋ฐฉํ–ฅ์œผ๋กœ ํ™•์‚ฐ๋œ๋‹ค. ์ธ์ ‘ํ•œ ๋ฐฉํ–ฅ์— ๊ณต๊ธฐ์ฒญ์ •๊ธฐ๊ฐ€ ์žˆ๊ฑฐ๋‚˜, ์นธ์ด ์—†์œผ๋ฉด ๊ทธ ๋ฐฉํ–ฅ์œผ๋กœ๋Š” ํ™•์‚ฐ์ด ์ผ์–ด๋‚˜์ง€ ์•Š๋Š”๋‹ค. ํ™•์‚ฐ๋˜๋Š” ์–‘์€ Ar,c/5์ด๊ณ  ์†Œ์ˆ˜์ ์€ ๋ฒ„๋ฆฐ๋‹ค. (r, c)์— ๋‚จ์€ ๋ฏธ์„ธ๋จผ์ง€์˜ ์–‘์€ Ar,c - (Ar,c/5)ร—(ํ™•์‚ฐ๋œ ๋ฐฉํ–ฅ์˜ ๊ฐœ์ˆ˜) ์ด๋‹ค.

๊ณต๊ธฐ์ฒญ์ •๊ธฐ๊ฐ€ ์ž‘๋™ํ•œ๋‹ค.

๊ณต๊ธฐ์ฒญ์ •๊ธฐ์—์„œ๋Š”ย ๋ฐ”๋žŒ์ด ๋‚˜์˜จ๋‹ค. ์œ„์ชฝ ๊ณต๊ธฐ์ฒญ์ •๊ธฐ์˜ย ๋ฐ”๋žŒ์€ ๋ฐ˜์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ ์ˆœํ™˜ํ•˜๊ณ , ์•„๋ž˜์ชฝ ๊ณต๊ธฐ์ฒญ์ •๊ธฐ์˜ ๋ฐ”๋žŒ์€ ์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ ์ˆœํ™˜ํ•œ๋‹ค. ๋ฐ”๋žŒ์ด ๋ถˆ๋ฉด ๋ฏธ์„ธ๋จผ์ง€๊ฐ€ ๋ฐ”๋žŒ์˜ ๋ฐฉํ–ฅ๋Œ€๋กœ ๋ชจ๋‘ ํ•œ ์นธ์”ฉ ์ด๋™ํ•œ๋‹ค. ๊ณต๊ธฐ์ฒญ์ •๊ธฐ์—์„œ ๋ถ€๋Š” ๋ฐ”๋žŒ์€ ๋ฏธ์„ธ๋จผ์ง€๊ฐ€ ์—†๋Š” ๋ฐ”๋žŒ์ด๊ณ , ๊ณต๊ธฐ์ฒญ์ •๊ธฐ๋กœ ๋“ค์–ด๊ฐ„ ๋ฏธ์„ธ๋จผ์ง€๋Š” ๋ชจ๋‘ ์ •ํ™”๋œ๋‹ค.

๋‹ค์Œ์€ ํ™•์‚ฐ์˜ ์˜ˆ์‹œ์ด๋‹ค.

์™ผ์ชฝ๊ณผ ์˜ค๋ฅธ์ชฝ์— ์นธ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์—, ๋‘ ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ํ™•์‚ฐ์ด ์ผ์–ด๋‚ฌ๋‹ค.

์ธ์ ‘ํ•œ ๋„ค ๋ฐฉํ–ฅ์œผ๋กœย ๋ชจ๋‘ ํ™•์‚ฐ์ด ์ผ์–ด๋‚œ๋‹ค.

๊ณต๊ธฐ์ฒญ์ •๊ธฐ๊ฐ€ ์žˆ๋Š” ์นธ์œผ๋กœ๋Š” ํ™•์‚ฐ์ด ์ผ์–ด๋‚˜์ง€ ์•Š๋Š”๋‹ค. ๊ณต๊ธฐ์ฒญ์ •๊ธฐ์˜ ๋ฐ”๋žŒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉํ–ฅ์œผ๋กœ ์ˆœํ™˜ํ•œ๋‹ค.

๋ฐฉ์˜ ์ •๋ณด๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, T์ดˆ๊ฐ€ ์ง€๋‚œ ํ›„ ๊ตฌ์‚ฌ๊ณผ์˜ ๋ฐฉ์— ๋‚จ์•„์žˆ๋Š” ๋ฏธ์„ธ๋จผ์ง€์˜ ์–‘์„ ๊ตฌํ•ด๋ณด์ž.


์ž…๋ ฅ

์ฒซ์งธ ์ค„์— R, C, T (6ย โ‰ค R, C โ‰ค 50, 1 โ‰ค T โ‰ค 1,000)ย ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ R๊ฐœ์˜ ์ค„์— Ar,cย (-1 โ‰ค Ar,c โ‰ค 1,000)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ณต๊ธฐ์ฒญ์ •๊ธฐ๊ฐ€ ์„ค์น˜๋œ ๊ณณ์€ Ar,c๊ฐ€ -1์ด๊ณ , ๋‚˜๋จธ์ง€ ๊ฐ’์€ ๋ฏธ์„ธ๋จผ์ง€์˜ ์–‘์ด๋‹ค. -1์€ 2๋ฒˆ ์œ„์•„๋ž˜๋กœ ๋ถ™์–ด์ ธ ์žˆ๊ณ , ๊ฐ€์žฅ ์œ— ํ–‰, ์•„๋žซ ํ–‰๊ณผ ๋‘ ์นธ์ด์ƒ ๋–จ์–ด์ ธ ์žˆ๋‹ค.


์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— T์ดˆ๊ฐ€ ์ง€๋‚œ ํ›„ ๊ตฌ์‚ฌ๊ณผ ๋ฐฉ์— ๋‚จ์•„์žˆ๋Š” ๋ฏธ์„ธ๋จผ์ง€์˜ ์–‘์„ ์ถœ๋ ฅํ•œ๋‹ค.


์˜ˆ์ œ

์˜ˆ์ œ 1

์ž…๋ ฅ

7 8 1
0 0 0 0 0 0 0 9
0 0 0 0 3 0 0 8
-1 0 5 0 0 0 22 0
-1 8 0 0 0 0 0 0
0 0 0 0 0 10 43 0
0 0 5 0 15 0 0 0
0 0 40 0 0 0 20 0


์ถœ๋ ฅ

188


์˜ˆ์ œ 2

์ž…๋ ฅ

7 8 2
0 0 0 0 0 0 0 9
0 0 0 0 3 0 0 8
-1 0 5 0 0 0 22 0
-1 8 0 0 0 0 0 0
0 0 0 0 0 10 43 0
0 0 5 0 15 0 0 0
0 0 40 0 0 0 20 0


์ถœ๋ ฅ

188


์˜ˆ์ œ 3

์ž…๋ ฅ

7 8 3
0 0 0 0 0 0 0 9
0 0 0 0 3 0 0 8
-1 0 5 0 0 0 22 0
-1 8 0 0 0 0 0 0
0 0 0 0 0 10 43 0
0 0 5 0 15 0 0 0
0 0 40 0 0 0 20 0


์ถœ๋ ฅ

186


์˜ˆ์ œ 4

์ž…๋ ฅ

7 8 4
0 0 0 0 0 0 0 9
0 0 0 0 3 0 0 8
-1 0 5 0 0 0 22 0
-1 8 0 0 0 0 0 0
0 0 0 0 0 10 43 0
0 0 5 0 15 0 0 0
0 0 40 0 0 0 20 0


์ถœ๋ ฅ

178


์˜ˆ์ œ 5

์ž…๋ ฅ

7 8 5
0 0 0 0 0 0 0 9
0 0 0 0 3 0 0 8
-1 0 5 0 0 0 22 0
-1 8 0 0 0 0 0 0
0 0 0 0 0 10 43 0
0 0 5 0 15 0 0 0
0 0 40 0 0 0 20 0


์ถœ๋ ฅ

172


์˜ˆ์ œ 6

์ž…๋ ฅ

7 8 20
0 0 0 0 0 0 0 9
0 0 0 0 3 0 0 8
-1 0 5 0 0 0 22 0
-1 8 0 0 0 0 0 0
0 0 0 0 0 10 43 0
0 0 5 0 15 0 0 0
0 0 40 0 0 0 20 0


์ถœ๋ ฅ

71


์˜ˆ์ œ 7

์ž…๋ ฅ

7 8 30
0 0 0 0 0 0 0 9
0 0 0 0 3 0 0 8
-1 0 5 0 0 0 22 0
-1 8 0 0 0 0 0 0
0 0 0 0 0 10 43 0
0 0 5 0 15 0 0 0
0 0 40 0 0 0 20 0


์ถœ๋ ฅ

52


์˜ˆ์ œ 8

์ž…๋ ฅ

7 8 50
0 0 0 0 0 0 0 9
0 0 0 0 3 0 0 8
-1 0 5 0 0 0 22 0
-1 8 0 0 0 0 0 0
0 0 0 0 0 10 43 0
0 0 5 0 15 0 0 0
0 0 40 0 0 0 20 0


์ถœ๋ ฅ

46


My Sol

import sys
input = sys.stdin.readline


def diffusionMain():
    global I, J, AU, AD
    global mat
    matNew = [[0]*J for _ in range(I)]
    didj = [(-1,0),(1,0),(0,-1),(0,1)]
    for i in range(I):
        for j in range(J):
            matNew[i][j] += mat[i][j]
            if matNew[i][j] > 4:
                v = mat[i][j] // 5
                for di, dj in didj:
                    if 0<=i+di<I and 0<=j+dj<J:
                        if mat[i+di][j+dj] > -1:
                            matNew[i+di][j+dj] += v
                            matNew[i][j] -= v

    return matNew


def cleanAirUp():
    global I, J, AU, AD
    global mat, ni, nj

    ni, nj = AU - 1, 0
    while ni-1 >= 0:
        mat[ni][0] = mat[ni-1][0]
        ni -= 1

    mat[0][0:-1] = mat[0][1:]

    ni = 0
    while ni+1 <= AU:
        mat[ni][J-1] = mat[ni+1][J-1]
        ni += 1

    mat[AU][2:] = mat[AU][1:-1]

    mat[AU][1] = 0


def cleanAirDown():
    global I, J, AU, AD
    global mat, ni, nj

    ni, nj = AD+1, 0
    while ni+1 <= I-1:
        mat[ni][0] = mat[ni+1][0]
        ni += 1

    mat[I-1][0:-1] = mat[I-1][1:]

    ni = I-1
    while ni-1 >= AD:
        mat[ni][J-1] = mat[ni-1][J-1]
        ni -= 1

    mat[AD][2:] = mat[AD][1:-1]

    mat[AD][1] = 0


I, J, T = map(int, input().split())
mat = [list(map(int, input().split())) for _ in range(I)]

for i in range(I):
    if mat[i][0]==-1:
        AU, AD = i, i+1
        break

t = 0
while t < T:
    # ํ™•์‚ฐ
    mat = diffusionMain()

    # ๊ณต๊ธฐ์ฒญ์ •๊ธฐ ์ž‘๋™
    cleanAirUp()
    cleanAirDown()

    # t ์ฆ๊ฐ€
    t += 1

# 0 ์ด์ƒ์ธ ์ˆ˜๋ฅผ ์„ธ์„œ ์ถœ๋ ฅ
ret = 0
for i in range(I):
    for j in range(J):
        if mat[i][j] > 0:
            ret += mat[i][j]
print(ret)

ํ™•์‚ฐ, ์œ„ ๊ตฌ์—ญ์˜ ํšŒ์ „, ์•„๋ž˜ ๊ตฌ์—ญ์˜ ํšŒ์ „์„ ๊ฐ๊ฐ ํ•จ์ˆ˜๋กœ ์ •์˜ํ•˜์—ฌ t์˜ ์ฆ๊ฐ€์— ๋”ฐ๋ผ ํ•œ ๋ฒˆ์”ฉ ํ˜ธ์ถœํ•˜์—ฌ mat์„ ์ˆ˜์ •ํ•˜๋„๋ก ํ•˜์˜€๋‹ค.


ํ™•์‚ฐ : diffusionMain()

2์ฐจ์› ๋ฐฐ์—ด๊ณผ ๋ธํƒ€๋ฅผ ํ™œ์šฉํ•˜๋ฉด ์–ด๋Š ์ •๋„ ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์ด์—ˆ๋‹ค. ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ๋Š” matNew๋ผ๋Š” 2์ฐจ์› ๋ฐฐ์—ด์„ ๋งŒ๋“œ๋Š”๋ฐ, ํ™•์‚ฐ๋œ ๊ฐ ์˜์—ญ์˜ ๊ฐ’๋“ค์„ ๋”ํ•˜๋Š” ๋ณ„๋„์˜ 2์ฐจ์› ๋ฐฐ์—ด์ด๋‹ค.

๋จผ์ € ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์€ mat 2์ฐจ์› ๋ฐฐ์—ด์„ ์™„์ „ ํƒ์ƒ‰์œผ๋กœ ์กฐํšŒํ•˜์—ฌ, ๊ฐ ํ–‰๊ณผ ์—ด ์ขŒํ‘œ๋งˆ๋‹ค ๊ธฐ์กด mat์˜ mat[i][j]๋ฅผ matNew[i][j]์— ๋”ํ•˜๊ณ , ์ด ๊ฐ’์ด 4๋ณด๋‹ค ํฌ๋‹ค๋ฉด ํ™•์‚ฐ์ด ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ 5๋กœ ๋‚˜๋ˆˆ ๋ชซ v๋ฅผ ๋ณ„๋„๋กœ ์ง€์ •ํ•˜์—ฌ, ์ƒํ•˜์ขŒ์šฐ์— ํ™•์‚ฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฐ„์ธ์ง€๋ฅผ ํŒ๋‹จํ•ด ํ™•์‚ฐ์‹œํ‚จ๋‹ค.

์ƒํ•˜์ขŒ์šฐ๋Š” ๋ธํƒ€๋ฅผ ์‚ฌ์šฉํ•˜์˜€์œผ๋ฉฐ, ์ผ๋ฐ˜์ ์œผ๋กœ ๋ธํƒ€์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฒ”์œ„ ์ œํ•œ์˜ ์กฐ๊ฑด๊ณผ ๋”๋ถˆ์–ด ๊ณต๊ธฐ์ฒญ์ •๊ธฐ์˜ ์กฐ๊ฑด์ธ ์Œ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ํ•ด๋‹น ์ขŒํ‘œ์— v๋ฅผ ๋”ํ•ด์ฃผ๊ณ , ํ™•์‚ฐ ๋ชจ์ฒด์ธ matNew[i][j]๋Š” v๋ฅผ ๋นผ์ค€๋‹ค.

์ด๋ ‡๊ฒŒ ํ™•์‚ฐ ์ „ 2์ฐจ์› ๋ฐฐ์—ด์ธ mat์˜ ๊ฐ ์นธ์˜ ๊ฐ’์„ ๋ชจ๋‘ ์กฐํšŒํ•˜์—ฌ matNew๋ฅผ ์™„์„ฑํ•˜๋ฉด ์ด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ํ•จ์ˆ˜ ์™ธ๋ถ€์—์„œ๋Š” ์ด ๋ฐ˜ํ™˜๊ฐ’์„ ์ƒˆ๋กœ์šด mat 2์ฐจ์› ๋ฐฐ์—ด๋กœ ์ง€์ •ํ•œ๋‹ค.


์ •ํ™” : clearAirUp/Down()

์žฌ๊ท€๋ฅผ ์‚ฌ์šฉํ• ๊นŒ ํ–ˆ์ง€๋งŒ, ๋ฐ˜๋ณต์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋ณด๋‹ค ๊ฐ€์‹œ์ ์œผ๋กœ๋‚˜ ์ž‘์„ฑํ•˜๊ธฐ์— ์ข‹์„ ๊ฒƒ ๊ฐ™์•„์„œ ๋ฐ˜๋ณต๊ณผ slicing์„ ์‚ฌ์šฉํ•˜์˜€๋‹ค. ๊ณต๊ธฐ์ฒญ์ •๊ธฐ๋กœ ๋“ค์–ด๊ฐ€๋Š” ๋ถ€๋ถ„์„ ์‹œ์ž‘์ ์œผ๋กœ 4๊ฐœ์˜ ๋ณ€์„ ๋ชจ๋‘ ํ•œ ์นธ์”ฉ ๋‹น๊ฒจ์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

์•„๋‚ ๋กœ๊ทธ์‹์ด์ง€๋งŒ ๊ฐ€์žฅ ์ง๊ด€์ ์ธ ๊ฒƒ ๊ฐ™์•„์„œ ํ™œ์šฉํ–ˆ๊ณ , clearAirUp๊ณผ Down์˜ ํ•จ์ˆ˜ ๋ชจ์Šต์ด ๋น„์Šทํ•˜์ง€๋งŒ ์ฐธ์กฐํ•˜๋Š” ๊ฐ’๊ณผ ๋ฒ”์œ„๊ฐ€ ๋‹ฌ๋ผ์„œ ์•„์˜ˆ ํ•จ์ˆ˜๋ฅผ ๋”ฐ๋กœ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด ํŽธํ•  ๊ฒƒ ๊ฐ™์•„ ๋‹ค์†Œ ์ค‘๋ณต๋˜์ง€๋งŒ 2๊ฐœ๋กœ ๋‚˜๋ˆ„์—ˆ๋‹ค.


while ๋ฐ˜๋ณต๋ฌธ

T์— ๋„๋‹ฌํ•˜๊ธฐ๊นŒ์ง€ 1์”ฉ ์ฆ๊ฐ€ํ•˜๋Š” t๋ฅผ ๋”ฐ๋กœ ๋งŒ๋“ค์–ด t๊ฐ€ T๊ฐ€ ๋  ๋•Œ๊นŒ์ง€ ํ™•์‚ฐ/์ •ํ™”์˜ ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ํ•œ ๋ฒˆ์”ฉ ํ•œ๋‹ค.


๊ฒฐ๊ณผ ๋„์ถœ

๊ฒฐ๊ณผ๋Š” mat์— ๋Œ€ํ•˜์—ฌ mat[i][j]๊ฐ€ 0 ์ด์ƒ์ด๋ผ๋ฉด ๋ฏธ์„ธ๋จผ์ง€๊ฐ€ ์žˆ๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ์ด๋ฅผ ํ•ฉ๊ณ„ ๋ณ€์ˆ˜์— ๋”ํ•ด์ฃผ๋ฉฐ ์™„์ „ํƒ์ƒ‰์„ ๋งˆ์น˜๋ฉด ๋˜๊ฒ ๋‹ค.


๊ฒฐ๊ณผ

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


๋ชจ๋ฒ”๋‹ต์•ˆ

์ถœ์ฒ˜

# empty

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