문제 출처
17444. 미세먼지 안녕
풀이
def find_machine(arr):
for y in range(len(arr)):
if arr[y][0] == -1:
return y, y+1
def diffusion(R, C):
global arr
brr = [[0]*C for _ in range(R)]
for y in range(R):
for x in range(C):
if arr[y][x] != 0 and arr[y][x] != -1:
sum_ = 0
dust = arr[y][x] // 5
for diff in range(4):
if 0 <= x+dx[diff] < C and 0 <= y+dy[diff] < R and (x+dx[diff], y+dy[diff]) != (0, top) and (x+dx[diff], y+dy[diff]) != (0, bottom):
brr[y+dy[diff]][x+dx[diff]] += dust
sum_ += dust
brr[y][x] += arr[y][x] - sum_
return brr
def move(top, bottom):
global arr
init = 0
x, y = 1, top
clock_dx, clock_dy = 1, 0
while (x, y) != (0, top):
init, arr[y][x] = arr[y][x], init
if (x, y) == (C-1, top):
clock_dx, clock_dy = 0, -1
elif (x, y) == (C-1, 0):
clock_dx, clock_dy = -1, 0
elif (x, y) == (0, 0):
clock_dx, clock_dy = 0, 1
x, y = x+clock_dx, y+clock_dy
init = 0
x, y = 1, bottom
clock_dx, clock_dy = 1, 0
while (x, y) != (0, bottom):
init, arr[y][x] = arr[y][x], init
if (x, y) == (C-1, bottom):
clock_dx, clock_dy = 0, 1
elif (x, y) == (C-1, R-1):
clock_dx, clock_dy = -1, 0
elif (x, y) == (0, R-1):
clock_dx, clock_dy = 0, -1
x, y = x+clock_dx, y+clock_dy
R, C, T = map(int, input().split())
arr = [list(map(int, input().split())) for _ in range(R)]
dx, dy = (0, 1, 0, -1), (1, 0, -1, 0)
top, bottom = find_machine(arr)
for i in range(T):
arr = diffusion(R, C)
move(top, bottom)
sum_ = 0
for y in range(R):
sum_ += sum(arr[y])
print(sum_)