[BOJ][๐ก4][๋ฐฑ์ค#17144] ๋ฏธ์ธ๋จผ์ง ์๋ !
์์ฑ:    
์ ๋ฐ์ดํธ:
์นดํ ๊ณ ๋ฆฌ: BOJ Gold IV
๋ฌธ์ ์ถ์ฒ
๋ฌธ์
๋ฏธ์ธ๋จผ์ง๋ฅผ ์ ๊ฑฐํ๊ธฐ ์ํด ๊ตฌ์ฌ๊ณผ๋ ๊ณต๊ธฐ์ฒญ์ ๊ธฐ๋ฅผ ์ค์นํ๋ ค๊ณ ํ๋ค. ๊ณต๊ธฐ์ฒญ์ ๊ธฐ์ ์ฑ๋ฅ์ ํ ์คํธํ๊ธฐ ์ํด ๊ตฌ์ฌ๊ณผ๋ ์ง์ย ํฌ๊ธฐ๊ฐย 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
๋๊ธ๋จ๊ธฐ๊ธฐ