백준 17144: 미세먼지 안녕! - BFS (Python/파이썬)

Hyn·2025년 6월 17일

Algorithm(Py)

목록 보기
37/37

범위 처리 꼼꼼하게 하기!

import sys
input = sys.stdin.readline

r, c, t = map(int, input().split())
room = [list(map(int, input().split())) for _ in range(r)]
cleaner = 0

for i in range(r):
    if room[i][0] == -1:
        cleaner = i
        break

def spread():
    temp = [[0] * c for _ in range(r)]
    dr = [-1, 1, 0, 0]
    dc = [0, 0, -1, 1]

    for row in range(r):
        for col in range(c):
            if room[row][col] > 0:
                dust = room[row][col] // 5
                cnt = 0
    
                for i in range(4):
                    nr = row + dr[i]
                    nc = col + dc[i]
                    if 0 <= nr < r and 0 <= nc < c and room[nr][nc] != -1:
                        cnt += 1
                        temp[nr][nc] += dust
    
                room[row][col] -= cnt * dust

    for row in range(r):
        for col in range(c):
            room[row][col] += temp[row][col]

    return

def clean():
    upper, lower = cleaner, cleaner +1

    # 위쪽 역방향
    for row in range(upper-1, 0, -1):
        room[row][0] = room[row-1][0]
    for col in range(c-1):
        room[0][col] = room[0][col+1]
    for row in range(upper):
        room[row][c-1] = room[row+1][c-1]
    for col in range(c-1, 1, -1):
        room[upper][col] = room[upper][col-1]
    room[upper][1] = 0

    # 아래쪽
    for row in range(lower+1, r-1):
        room[row][0] = room[row+1][0]
    for col in range(c-1):
        room[r-1][col] = room[r-1][col+1]
    for row in range(r-1, lower, -1):
        room[row][c-1] = room[row-1][c-1]
    for col in range(c-1, 1, -1):
        room[lower][col] = room[lower][col-1]
    room[lower][1] = 0

    return

for sec in range(t):
    spread()
    clean()

print(2 + sum(sum(x) for x in room))
profile
쪼렙 개발자 하지만 포기하지 않지

0개의 댓글