๋ฌธ์
๋ฏธ์ธ๋จผ์ง๋ฅผ ์ ๊ฑฐํ๊ธฐ ์ํด ๊ตฌ์ฌ๊ณผ๋ ๊ณต๊ธฐ์ฒญ์ ๊ธฐ๋ฅผ ์ค์นํ๋ ค๊ณ ํ๋ค. ๊ณต๊ธฐ์ฒญ์ ๊ธฐ์ ์ฑ๋ฅ์ ํ ์คํธํ๊ธฐ ์ํด ๊ตฌ์ฌ๊ณผ๋ ์ง์ ํฌ๊ธฐ๊ฐ 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์ด๊ฐ ์ง๋ ํ ๊ตฌ์ฌ๊ณผ ๋ฐฉ์ ๋จ์์๋ ๋ฏธ์ธ๋จผ์ง์ ์์ ์ถ๋ ฅํ๋ค.
https://www.acmicpc.net/problem/17144
๐ก ํ์ด ๋ฐ ์ฝ๋
from copy import deepcopy
r, c, t = map(int, input().split())
graph = []
for _ in range(r):
graph.append(list(map(int, input().split())))
dx, dy = [-1, 1, 0, 0], [0, 0, -1, 1]
def spread():
data = deepcopy(graph)
for x in range(r):
for y in range(c):
if graph[x][y] > 0:
temp, count = graph[x][y] // 5, 0
for i in range(4):
nx, ny = x + dx[i], y + dy[i]
if nx < 0 or nx >= r or ny < 0 or ny >= c or graph[nx][ny] == -1:
continue
data[nx][ny] += temp
count += 1
data[x][y] -= temp * count
return data
def move(x1, x2):
data = deepcopy(graph)
for i in range(1, c-1):
data[x1][i+1] = graph[x1][i]
data[x2][i+1] = graph[x2][i]
for i in range(c-1):
data[0][i] = graph[0][i+1]
data[r-1][i] = graph[r-1][i+1]
for i in range(x1):
data[i+1][0] = graph[i][0]
data[i][c-1] = graph[i+1][c-1]
for i in range(x2+1, r):
data[i-1][0] = graph[i][0]
data[i][c-1] = graph[i-1][c-1]
data[x1][0], data[x2][0], data[x1][1], data[x2][1] = -1, -1, 0, 0
return data
cleaner = []
for _ in range(t):
graph = spread()
for i in range(r):
if graph[i][0] == -1:
cleaner.append(i)
graph = move(cleaner[0], cleaner[1])
result = 0
for i in range(r):
for j in range(c):
if graph[i][j] > 0:
result += graph[i][j]
print(result)
์ฃผ์ด์ง ์กฐ๊ฑด ๊ทธ๋๋ก ๊ตฌํํ๋ฉด ๋๋ ๋ฌธ์ ์ด๋ค. ์ฃผ์ํ ์ ์ ๋ฏธ์ธ๋จผ์ง ํ์ฐ๊ณผ ๊ณต๊ธฐ์ฒญ์ ๊ธฐ ์๋ ์ ์ ๋ ฅ ๋ฐ์ ๋ฏธ์ธ๋จผ์ง ๋ฐ์ดํฐ์ ์ง์ ๋ณํ์ํค๋ ๊ฒ์ด ์๋๋ผ, deepcopy๋ก ๋ณต์ฌ๋ณธ์ ๋ง๋ค์ด์ ์ ์ฉํ ํ ๋ฎ์ด ์ฐ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํํด์ผ ํ๋ค. ํ์ฐ๋๊ฑฐ๋ ์ด๋ํ ๋ฏธ์ธ๋จผ์ง๊ฐ ๋ค๋ฅธ ๊ฒฉ์์ ๋ฏธ์ธ๋จผ์ง ํ์ฐ์ด๋ ์ด๋์ ์ํฅ์ ๋ผ์น๋ฉด ์๋๊ธฐ ๋๋ฌธ์ด๋ค.
'Algorithm > ๐ Baekjoon Judge' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] ๋ฐฑ์ค 21609๋ฒ ์์ด ์คํ๊ต - ํ์ด์ฌ(Python) (1) | 2022.10.07 |
---|---|
[BOJ] ๋ฐฑ์ค 21608๋ฒ ์์ด ์ด๋ฑํ๊ต - ํ์ด์ฌ(Python) (0) | 2022.10.07 |
[BOJ] ๋ฐฑ์ค 15685๋ฒ ๋๋๊ณค ์ปค๋ธ - ํ์ด์ฌ(Python) (0) | 2022.08.23 |
[BOJ] ๋ฐฑ์ค 2133๋ฒ ํ์ผ ์ฑ์ฐ๊ธฐ - ํ์ด์ฌ(Python) (0) | 2022.08.18 |
[BOJ] ๋ฐฑ์ค 2294๋ฒ ๋์ 2 - ํ์ด์ฌ(Python) (0) | 2022.08.18 |