코딩테스트/구현
미세먼지 안녕!
수타.
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)
단순한 구현 문제였는데, 시간이 오래걸렸습니다. 문제에서 주어진 조건을 명확하게 이해하고, 차례대로 구현한후, 단계별로 확인 한다면, 큰 무리없이 풀 수 있는 문제입니다.