Skip to content

Commit 82edf84

Browse files
authored
[BOJ] 17144 미세먼지 안녕! (G4)
1 parent 8103358 commit 82edf84

File tree

1 file changed

+82
-0
lines changed

1 file changed

+82
-0
lines changed

김지호/6주차/260204.py

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
# https://www.acmicpc.net/problem/17144
2+
# 미세먼지 안녕!, 골드4
3+
4+
import sys
5+
sys.stdin = open("../../../input.txt",'r')
6+
7+
R, C, T = map(int, input().split())
8+
9+
board = []
10+
cleaners = []
11+
12+
for row in range(R):
13+
line = list(map(int, input().split()))
14+
board.append(line)
15+
16+
for col in range(C):
17+
if line[col] == -1:
18+
cleaners.append((row, col))
19+
20+
# 확산 방향
21+
drow = [0, 1, 0, -1]
22+
dcol = [1, 0, -1, 0]
23+
24+
for _ in range(T):
25+
# 1. 미세먼지 확산
26+
new_board = [[0] * C for _ in range(R)]
27+
28+
for row in range(R):
29+
for col in range(C):
30+
if board[row][col] == -1:
31+
new_board[row][col] = -1
32+
elif board[row][col] > 0:
33+
spread = board[row][col] // 5
34+
count = 0
35+
36+
for i in range(4):
37+
nrow = row + drow[i]
38+
ncol = col + dcol[i]
39+
40+
if 0 <= nrow < R and 0 <= ncol < C and board[nrow][ncol] != -1:
41+
new_board[nrow][ncol] += spread
42+
count += 1
43+
44+
new_board[row][col] += board[row][col] - (spread * count)
45+
46+
board = new_board
47+
48+
# 2. 공기청정기 작동
49+
# 위쪽 (반시계)
50+
top = cleaners[0][0]
51+
# 아래로
52+
for row in range(top - 1, 0, -1):
53+
board[row][0] = board[row - 1][0]
54+
# 왼쪽으로
55+
for col in range(C - 1):
56+
board[0][col] = board[0][col + 1]
57+
# 위로
58+
for row in range(top):
59+
board[row][C - 1] = board[row + 1][C - 1]
60+
# 오른쪽으로
61+
for col in range(C - 1, 1, -1):
62+
board[top][col] = board[top][col - 1]
63+
board[top][1] = 0
64+
65+
# 아래쪽 (시계)
66+
bottom = cleaners[1][0]
67+
# 위로
68+
for row in range(bottom + 1, R - 1):
69+
board[row][0] = board[row + 1][0]
70+
# 왼쪽으로
71+
for col in range(C - 1):
72+
board[R - 1][col] = board[R - 1][col + 1]
73+
# 아래로
74+
for row in range(R - 1, bottom, -1):
75+
board[row][C - 1] = board[row - 1][C - 1]
76+
# 오른쪽으로
77+
for col in range(C - 1, 1, -1):
78+
board[bottom][col] = board[bottom][col - 1]
79+
board[bottom][1] = 0
80+
81+
answer = sum(board[row][col] for row in range(R) for col in range(C) if board[row][col] > 0)
82+
print(answer)

0 commit comments

Comments
 (0)