본문 바로가기
알고리즘/python

17144번 미세먼지 안녕!(python3)

by 펀구구 2022. 2. 18.

https://www.acmicpc.net/problem/17144

 

17144번: 미세먼지 안녕!

미세먼지를 제거하기 위해 구사과는 공기청정기를 설치하려고 한다. 공기청정기의 성능을 테스트하기 위해 구사과는 집을 크기가 R×C인 격자판으로 나타냈고, 1×1 크기의 칸으로 나눴다. 구사

www.acmicpc.net

바람이 지나가는 곳만 한칸씩 밀어주면 되는 문제다.

from copy import deepcopy
import sys

R, C, T = map(int, input().split())

data = []
for _ in range(R):
    a = sys.stdin.readline()
    data.append(list(map(int, a.split())))
up = []
down = []
flag = False
for i in range(R):
    for j in range(C):
        if data[i][j] == -1:
            up = [i, j]
            down = [i + 1, j]
            flag = True
            break
    if flag:
        break

dx = [1, -1, 0, 0]
dy = [0, 0, 1, -1]


def diffusion(a, b, temp2):
    now = temp2[a][b]
    for i in range(4):
        nx = a + dx[i]
        ny = b + dy[i]
        if 0 <= nx < R and 0 <= ny < C:
            if data[nx][ny] != -1:
                data[nx][ny] += now // 5
                data[a][b] -= now // 5


def real():
    temp = deepcopy(data)
    for i in range(R):
        for j in range(C):
            if data[i][j] != -1:
                diffusion(i, j, temp)
    temp = deepcopy(data)
    data[up[0]][1] = 0
    for i in range(2, C):
        data[up[0]][i] = temp[up[0]][i - 1]
    for i in range(up[0] - 1, -1, -1):
        data[i][C - 1] = temp[i + 1][C - 1]
    for i in range(C - 1, 0, -1):
        data[0][i - 1] = temp[0][i]
    for i in range(1, up[0]):
        data[i][0] = temp[i - 1][0]

    data[down[0]][1] = 0
    for i in range(2, C):
        data[down[0]][i] = temp[down[0]][i - 1]
    for i in range(down[0] + 1, R):
        data[i][C - 1] = temp[i - 1][C - 1]
    for i in range(C - 2, -1, -1):
        data[R - 1][i] = temp[R - 1][i + 1]
    for i in range(R - 2, down[0], -1):
        data[i][0] = temp[i + 1][0]

for _ in range(T):
    real()

ans = 0
for i in range(R):
    for j in range(C):
        if data[i][j] != -1:
            ans += data[i][j]
print(ans)

'알고리즘 > python' 카테고리의 다른 글

5427번 불(python3)  (3) 2022.02.21
11559번 Puyo Puyo(python3)  (0) 2022.02.18
14888번 연산자 끼워넣기(python3)  (0) 2022.02.11
2573번 빙산(python3)  (0) 2022.02.06
16236번 아기상어(python3)  (0) 2022.02.06