코딩테스트/구현

미세먼지 안녕!

수타. 2023. 7. 28. 10:39

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

 

17144번: 미세먼지 안녕!

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

www.acmicpc.net

문제요약:

미세먼지와 공기청정기가 2차원배열에 주어질때 미세먼지는 상하좌우로, 미세먼지//5만큼 확산되고, 위쪽 공기청정기의 바람은 반시계방향으로 순환하고, 아래쪽 공기청정기의 바람은 시계방향으로 순환된다. t초후 미세먼지량을 구하여라

 

소요시간: 50분

시도횟수 : 1

난이도 골드4

 

코딩:

import sys
input = sys.stdin.readline

r,c,t = map(int,input().split())

arr = [list(map(int,input().split())) for _ in range(r)]

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

#공기청정기 위치
for y in range(r):
    if arr[y][0] == -1 :
        cleaner = y
        break

#t초 반복
for _ in range(t):
    
    #미세먼지 확산
    temp = [[0]*c for _ in range(r)]
    for y in range(r):        
        for x in range(c):
            #미세먼지가 5이상 있다면
            if arr[y][x] >=5:
                for i in range(4):
                    ny = y+dy[i]
                    nx = x+dx[i]
                    if 0<=ny<r and 0<=nx<c and arr[ny][nx]!=-1:
                        temp[ny][nx] += arr[y][x]//5
                        temp[y][x] -= arr[y][x]//5

    for y in range(r):
        for x in range(c):
            arr[y][x] += temp[y][x]

    #공기청정기 작동
    for y in range(cleaner-2,-1,-1):
        arr[y+1][0] = arr[y][0]
    for x in range(1,c):
        arr[0][x-1] = arr[0][x]
    for y in range(1,cleaner+1):
        arr[y-1][-1] = arr[y][-1]
    for x in range(c-2,0,-1):
        arr[cleaner][x+1] = arr[cleaner][x]
    arr[cleaner][1] = 0

    for y in range(cleaner+3,r):
        arr[y-1][0] = arr[y][0]
    for x in range(1,c):
        arr[-1][x-1] = arr[-1][x]
    for y in range(r-2,cleaner,-1):
        arr[y+1][-1] = arr[y][-1]
    for x in range(c-2,0,-1):
        arr[cleaner+1][x+1] = arr[cleaner+1][x]
    arr[cleaner+1][1] = 0

print(sum([j for i in arr for j in i]) +2)

단순한 구현 문제였는데, 시간이 오래걸렸습니다. 문제에서 주어진 조건을 명확하게 이해하고, 차례대로 구현한후, 단계별로 확인 한다면, 큰 무리없이 풀 수 있는 문제입니다.