Algorithm/Python

[백준 17144] 미세먼지 안녕!

🥭맹2 2021. 4. 20. 02:28

1. 문제

www.acmicpc.net/problem/17144

 

17144번: 미세먼지 안녕!

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

www.acmicpc.net

2. 접근 방법

구현, 시뮬레이션 문제라서 문제에서 제시한 대로 따라가면 된다.

 

크게 2개를 구현하면 된다.

 

1. 미세먼지 확산

2. 공기청정기 작동

3. 코드

python

def clean():
    global board
    y1, y2 = cleaner[0], cleaner[1]
    for y in range(y1-2, -1, -1):
        board[y+1][0] = board[y][0]
    for x in range(1, C):
        board[0][x-1] = board[0][x]
    for y in range(1, y1+1):
        board[y-1][C-1] = board[y][C-1]
    for x in range(C-2, 0, -1):
        board[y1][x+1] = board[y1][x]

    for y in range(y2+1, R):
        board[y-1][0] = board[y][0]
    for x in range(1, C):
        board[R-1][x-1] = board[R-1][x]
    for y in range(R-2, y2-1, -1):
        board[y + 1][C - 1] = board[y][C - 1]
    for x in range(C-2, 0, -1):
        board[y2][x + 1] = board[y2][x]


def spread():
    global board, dx, dy
    add_dust = [[0] * C for _ in range(R)]
    for y in range(R):
        for x in range(C):
            if board[y][x] >= 5:
                add_dust_num = board[y][x]//5
                for i in range(4):
                    tx, ty = x+dx[i], y+dy[i]
                    if 0 <= tx < C and 0 <= ty < R and board[ty][tx] != -1:
                        add_dust[ty][tx] += add_dust_num
                        add_dust[y][x] -= add_dust_num
    return add_dust


R, C, T = map(int, input().split())
board = [list(map(int, input().split())) for _ in range(R)]
cleaner = []
dx, dy = (1, 0, -1, 0), (0, 1, 0, -1)

for y in range(R):
    if board[y][0] == -1:
        cleaner.append(y)

for _ in range(T):
    dust = []
    temp = spread()
    for y in range(R):
        for x in range(C):
            board[y][x] += temp[y][x]
    clean()
    board[cleaner[0]][1] = 0
    board[cleaner[1]][1] = 0
    board[cleaner[0]][0] = -1
    board[cleaner[1]][0] = -1
ans = 0
for y in range(len(board)):
    ans += sum(board[y])
ans += 2
print(ans)

4. 마치며

공기 청정기 작동에서 인덱스가 자꾸 헷갈려서 엄청난 디버깅을 했다.

o(一︿一+)o

'Algorithm > Python' 카테고리의 다른 글

[백준 17140] 이차원 배열과 연산  (0) 2021.04.20
[백준 17143] 낚시왕  (0) 2021.04.20
[백준 16234] 인구 이동  (0) 2021.04.19
[백준 5373] 큐빙  (0) 2021.04.19
[백준 15683] 감시  (0) 2021.04.18