여름의 서재
[백준] 17144_미세먼지 안녕! 본문
728x90
📕 문제
https://www.acmicpc.net/problem/17144
17144번: 미세먼지 안녕!
미세먼지를 제거하기 위해 구사과는 공기청정기를 설치하려고 한다. 공기청정기의 성능을 테스트하기 위해 구사과는 집을 크기가 R×C인 격자판으로 나타냈고, 1×1 크기의 칸으로 나눴다. 구사
www.acmicpc.net
💡 풀이법
1. 각 좌표에 확산되는 먼지를 담을 2차원 리스트 dust를 만들어준다.
2. 모든 좌표를 돌면서 값이 0보다 크다면 사방으로 확산되는 먼지를 구해주고, 사방을 탐색하며 가능한 좌표에 해당하는 dust에 확산되는 먼지를 담는다. 확산을 해준 현재 dust 위치에는 확산을 해주고 먼지를 빼준다.
3. 그렇게 이중 for문이 끝나면 다시 모든 좌표를 돌면서 각각의 matrix 좌표에 dust값을 더해준다. -> 확산 끝
4. 이제 공기청정기로 먼지가 순환하는 것을 구현한다.
5. 공기청정기 줄부터 시계방향, 반시계 방향으로 값을 바꿔준다.
6. 위의 2,3,4,5를 T만큼 반복한 후 matrix에 있는 모든 먼지의 값을 더한 값을 출력한다.
(단, 공기청정기도 들어가있기 때문에 답에 +2를 해준다)
R, C, T = map(int, input().split())
matrix = [list(map(int, input().split())) for _ in range(R)]
dxy = [(1,0),(0,1),(-1,0),(0,-1)]
for _ in range(T):
dust = [[0 for _ in range(C)] for _ in range(R)]
for x in range(R):
for y in range(C):
if matrix[x][y] > 0:
dustwind = matrix[x][y]//5
cnt = 0
for dx, dy in dxy:
nx, ny = x + dx, y + dy
if -1 < nx < R and -1 < ny < C and matrix[nx][ny] != -1:
dust[nx][ny] += dustwind
cnt += 1
dust[x][y] -= dustwind*cnt
cleaner_x = 0
for x in range(R):
for y in range(C):
matrix[x][y] += dust[x][y]
if matrix[x][y] == -1 and cleaner_x == 0:
cleaner_x = x
# 공기청정기 줄 이동
temp1 = matrix[cleaner_x].pop()
temp2 = matrix[cleaner_x + 1].pop()
matrix[cleaner_x].insert(1,0)
matrix[cleaner_x + 1].insert(1,0)
# 맨 오른쪽 이동
for i in range(cleaner_x-1, -1, -1):
matrix[i][-1], temp1 = temp1, matrix[i][-1]
for i in range(cleaner_x+2, R):
matrix[i][-1], temp2 = temp2, matrix[i][-1]
# 맨위, 맨아래 줄 이동
for j in range(C-2, -1 , -1):
matrix[0][j], temp1 = temp1, matrix[0][j]
matrix[R-1][j], temp2 = temp2, matrix[R-1][j]
# 맨 왼쪽 이동
for i in range(1, cleaner_x):
matrix[i][0], temp1 = temp1, matrix[i][0]
for i in range(R-2, cleaner_x + 1, -1):
matrix[i][0], temp2 = temp2, matrix[i][0]
ans = 0
for x in range(R):
ans += sum(matrix[x])
print(ans+2)
'알고리즘 > BOJ' 카테고리의 다른 글
[백준] 1197_최소 스패닝 트리 (prim 이용) (0) | 2021.10.20 |
---|---|
[백준] 1717_집합의 표현 (disjoint set 이용) (0) | 2021.10.20 |
[백준] 17070_파이프 옮기기1 (DFS & DP 이용) (0) | 2021.10.13 |
[백준] 14891_톱니바퀴 (0) | 2021.10.13 |
[백준] 17471_게리맨더링 (0) | 2021.10.13 |
Comments