-
Notifications
You must be signed in to change notification settings - Fork 0
/
17144.py
67 lines (49 loc) · 1.69 KB
/
17144.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
from collections import deque
r, c, t = map(int, input().split())
house = [list(map(int, input().split())) for _ in range(r)]
air_cleaner = []
dx = [0, 1, 0, -1]
dy = [1, 0, -1, 0]
for i in range(r):
if house[i][0] == -1:
air_cleaner.append(i)
time = 0
while time < t:
q = deque()
# 미세 먼지가 있는 곳 찾기
for i in range(r):
for j in range(c):
if house[i][j] != 0 and house[i][j] != -1:
q.append((i, j, house[i][j]))
# 미세 먼지 확산
while q:
x, y, amount = q.popleft()
count = 0
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if nx < 0 or ny < 0 or nx >= r or ny >= c:
continue
if house[nx][ny] == -1:
continue
house[nx][ny] += amount // 5
count += 1
house[x][y] -= (amount // 5) * count
# 공기청정기 작동
for i in range(air_cleaner[0] - 1, 0, -1):
house[i][0] = house[i - 1][0]
for i in range(air_cleaner[1] + 1, r - 1):
house[i][0] = house[i + 1][0]
for i in range(c - 1):
house[0][i] = house[0][i + 1]
house[r - 1][i] = house[r - 1][i + 1]
for i in range(air_cleaner[0]):
house[i][c - 1] = house[i + 1][c - 1]
for i in range(r - 1, air_cleaner[1] - 1, -1):
house[i][c - 1] = house[i - 1][c - 1]
for i in range(c - 1, 1, -1):
house[air_cleaner[0]][i] = house[air_cleaner[0]][i - 1]
house[air_cleaner[1]][i] = house[air_cleaner[1]][i - 1]
house[air_cleaner[0]][1], house[air_cleaner[1]][1] = 0, 0
time += 1
print(sum([sum(room) for room in house]) + 2)