본문 바로가기
백준

[python] 17444. 미세먼지 안녕!

by DylanMsK 2019. 8. 4.

문제 출처

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_)

'백준' 카테고리의 다른 글

[python] 13458. 시험감독  (0) 2019.08.04
[python] 14500. 테트로미노  (0) 2019.08.04
[python] 16234. 인구 이동  (0) 2019.07.27
[python] 17140. 이차원 배열과 연산  (0) 2019.07.24
[python] 3190. 뱀  (0) 2019.07.24