본문 바로가기

알고리즘/백준

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

www.acmicpc.net/problem/17144

 

17144번: 미세먼지 안녕!

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

www.acmicpc.net

풀이 방법

  • 적혀있는 대로 구현하면 돼서 비교적 쉬운 문제였다.
  • 미세먼지 확장 : 모든 곳 방문하면서 인접한 곳에 a//5더해주고, a-(a//5)*cnt 해주는 함수 만들기 = diffusion
  • 공기 청정기 작동 : 공기청정기 위에서 시작해서 반시계 방향순환, 아래에서 시작해서 반시계 방향순환 = clean

전체 코드

r, c, t = map(int, input().split())
room = []
for i in range(r):
    room.append(list(map(int, input().split())))
cleaner = []
for i in range(r):
    for j in range(c):
        if room[i][j] == -1:
            cleaner.append((i, j))

def diffusion():
    global room, cleaner
    temp = [[0]*c for _ in range(r)]
    move = [(0,1),(0,-1),(1,0),(-1,0)]
    for i in range(r):
        for j in range(c):
            if room[i][j]==0 or room[i][j]==-1: continue
            cnt = 0
            for x, y in move:
                cx = i+x
                cy = j+y
                if 0<=cx<r and 0<=cy<c and room[cx][cy]!= -1:
                    temp[cx][cy] += room[i][j]//5
                    cnt += 1
            temp[i][j] += room[i][j]-cnt*(room[i][j]//5)
    temp[cleaner[0][0]][cleaner[0][1]] = -1
    temp[cleaner[1][0]][cleaner[1][1]] = -1
    room = temp
def clean(x, y, move):
    last = 0
    j = 0
    start = (x, y)
    x += move[0][0]
    y += move[0][1]
    while x != start[0] or y != start[1]:
        next = room[x][y]
        room[x][y] = last
        last = next
        x += move[j][0]
        y += move[j][1]
        if not (0<=x<r and 0<=y<c):
            if j == 3: break
            x = x - move[j][0] + move[j+1][0]
            y = y - move[j][1] + move[j+1][1]
            j += 1

for _ in range(t):
    diffusion()
    clean(cleaner[0][0], cleaner[0][1], [(0, 1), (-1, 0), (0, -1), (1, 0)])
    clean(cleaner[1][0], cleaner[1][1], [(0, 1), (1, 0), (0, -1), (-1, 0)])
answer = 0
for i in range(r):
    for j in range(c):
        if room[i][j] and room[i][j] != -1:
            answer+= room[i][j]
print(answer)
반응형