๐ข ๋น์ฐ
1. ๋ฌธ์ ๋งํฌ
2. ์ฝ๋
Python3
33268KB
4020ms
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
"""
[2573] ๋น์ฐ
๐ ๋ฌธ์
์ง๊ตฌ ์จ๋ํ๋ก ์ธํ์ฌ ๋ถ๊ทน์ ๋น์ฐ์ด ๋
น๊ณ ์๋ค.
๋น์ฐ์ ๊ทธ๋ฆผ 1๊ณผ ๊ฐ์ด 2์ฐจ์ ๋ฐฐ์ด์ ํ์ํ๋ค๊ณ ํ์.
๋น์ฐ์ ๊ฐ ๋ถ๋ถ๋ณ ๋์ด ์ ๋ณด๋ ๋ฐฐ์ด์ ๊ฐ ์นธ์ ์์ ์ ์๋ก ์ ์ฅ๋๋ค.
๋น์ฐ ์ด์ธ์ ๋ฐ๋ค์ ํด๋น๋๋ ์นธ์๋ 0์ด ์ ์ฅ๋๋ค.
๊ทธ๋ฆผ 1์์ ๋น์นธ์ ๋ชจ๋ 0์ผ๋ก ์ฑ์์ ธ ์๋ค๊ณ ์๊ฐํ๋ค.
2 4 5 3
3 2 5 2
7 6 2 4
<๊ทธ๋ฆผ 1. ํ์ ๊ฐ์๊ฐ 5์ด๊ณ ์ด์ ๊ฐ์๊ฐ 7์ธ 2์ฐจ์ ๋ฐฐ์ด์ ์ ์ฅ๋ ๋น์ฐ์ ๋์ด ์ ๋ณด>
๋น์ฐ์ ๋์ด๋ ๋ฐ๋ท๋ฌผ์ ๋ง์ด ์ ํด์๋ ๋ถ๋ถ์์ ๋ ๋นจ๋ฆฌ ์ค์ด๋ค๊ธฐ ๋๋ฌธ์,
๋ฐฐ์ด์์ ๋น์ฐ์ ๊ฐ ๋ถ๋ถ์ ํด๋น๋๋ ์นธ์ ์๋ ๋์ด๋ ์ผ๋
๋ง๋ค ๊ทธ ์นธ์ ๋์๋จ๋ถ ๋ค ๋ฐฉํฅ์ผ๋ก ๋ถ์ด์๋ 0์ด ์ ์ฅ๋ ์นธ์ ๊ฐ์๋งํผ ์ค์ด๋ ๋ค.
๋จ, ๊ฐ ์นธ์ ์ ์ฅ๋ ๋์ด๋ 0๋ณด๋ค ๋ ์ค์ด๋ค์ง ์๋๋ค.
๋ฐ๋ท๋ฌผ์ ํธ์์ฒ๋ผ ๋น์ฐ์ ๋๋ฌ์ธ์ฌ ์์ ์๋ ์๋ค.
๋ฐ๋ผ์ ๊ทธ๋ฆผ 1์ ๋น์ฐ์ ์ผ๋
ํ์ ๊ทธ๋ฆผ 2์ ๊ฐ์ด ๋ณํ๋๋ค.
2 4 1
1 1 5
5 4 1 2
<๊ทธ๋ฆผ 2>
๊ทธ๋ฆผ 3์ ๊ทธ๋ฆผ 1์ ๋น์ฐ์ด 2๋
ํ์ ๋ณํ ๋ชจ์ต์ ๋ณด์ฌ์ค๋ค.
3
4
3 2
<๊ทธ๋ฆผ 3>
2์ฐจ์ ๋ฐฐ์ด์์ ๋์๋จ๋ถ ๋ฐฉํฅ์ผ๋ก ๋ถ์ด์๋ ์นธ๋ค์ ์๋ก ์ฐ๊ฒฐ๋์ด ์๋ค๊ณ ๋งํ๋ค.
๋ฐ๋ผ์ ๊ทธ๋ฆผ 2์ ๋น์ฐ์ ํ ๋ฉ์ด๋ฆฌ์ด์ง๋ง, ๊ทธ๋ฆผ 3์ ๋น์ฐ์ ์ธ ๋ฉ์ด๋ฆฌ๋ก ๋ถ๋ฆฌ๋์ด ์๋ค
ํ ๋ฉ์ด๋ฆฌ์ ๋น์ฐ์ด ์ฃผ์ด์ง ๋, ์ด ๋น์ฐ์ด ๋ ๋ฉ์ด๋ฆฌ ์ด์์ผ๋ก ๋ถ๋ฆฌ๋๋ ์ต์ด์ ์๊ฐ(๋
)์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
๊ทธ๋ฆผ 1์ ๋น์ฐ์ ๋ํด์๋ 2๊ฐ ๋ต์ด๋ค. ๋ง์ผ ์ ๋ถ ๋ค ๋
น์ ๋๊น์ง ๋ ๋ฉ์ด๋ฆฌ ์ด์์ผ๋ก ๋ถ๋ฆฌ๋์ง ์์ผ๋ฉด ํ๋ก๊ทธ๋จ์ 0์ ์ถ๋ ฅํ๋ค.
๐ ์
๋ ฅ
์ฒซ ์ค์๋ ์ด์ฐจ์ ๋ฐฐ์ด์ ํ์ ๊ฐ์์ ์ด์ ๊ฐ์๋ฅผ ๋ํ๋ด๋ ๋ ์ ์ N๊ณผ M์ด ํ ๊ฐ์ ๋น์นธ์ ์ฌ์ด์ ๋๊ณ ์ฃผ์ด์ง๋ค.
N๊ณผ M์ 3 ์ด์ 300 ์ดํ์ด๋ค.
๊ทธ ๋ค์ N๊ฐ์ ์ค์๋ ๊ฐ ์ค๋ง๋ค ๋ฐฐ์ด์ ๊ฐ ํ์ ๋ํ๋ด๋ M๊ฐ์ ์ ์๊ฐ ํ ๊ฐ์ ๋น ์นธ์ ์ฌ์ด์ ๋๊ณ ์ฃผ์ด์ง๋ค.
๊ฐ ์นธ์ ๋ค์ด๊ฐ๋ ๊ฐ์ 0 ์ด์ 10 ์ดํ์ด๋ค.
๋ฐฐ์ด์์ ๋น์ฐ์ด ์ฐจ์งํ๋ ์นธ์ ๊ฐ์, ์ฆ, 1 ์ด์์ ์ ์๊ฐ ๋ค์ด๊ฐ๋ ์นธ์ ๊ฐ์๋ 10,000 ๊ฐ ์ดํ์ด๋ค.
๋ฐฐ์ด์ ์ฒซ ๋ฒ์งธ ํ๊ณผ ์ด, ๋ง์ง๋ง ํ๊ณผ ์ด์๋ ํญ์ 0์ผ๋ก ์ฑ์์ง๋ค.
๐ ์ถ๋ ฅ
์ฒซ ์ค์ ๋น์ฐ์ด ๋ถ๋ฆฌ๋๋ ์ต์ด์ ์๊ฐ(๋
)์ ์ถ๋ ฅํ๋ค.
๋ง์ผ ๋น์ฐ์ด ๋ค ๋
น์ ๋๊น์ง ๋ถ๋ฆฌ๋์ง ์์ผ๋ฉด 0์ ์ถ๋ ฅํ๋ค.
"""
# 1) BFS
from collections import deque
def bfs(x, y) :
# ๋น์ฐ ์์น
q = deque()
q.append((x, y))
# ์ฃผ๋ณ์ ๋ฐ๋ค๊ฐ ์๋ ๋น์ฐ์ (x, y, ๋ฐ๋ค ๊ฐฏ์)
visited[x][y] = 1
seaList = []
while q :
x, y = q.popleft()
sea = 0
for i in range(4) :
nx = x + dx[i]
ny = y + dy[i]
if 0 <= nx < N and 0 <= ny < M :
if not graph[nx][ny] :
# ๋น์ฐ ์ฃผ๋ณ์ ๋ฐ๋ค ๊ฐฏ์
sea += 1
elif graph[nx][ny] and not visited[nx][ny] :
q.append((nx, ny))
visited[nx][ny] = 1
if sea > 0 :
seaList.append((x, y, sea))
# ๋น์ฐ ๋
น์ด๊ธฐ
for x, y, sea in seaList :
graph[x][y] = max(0, graph[x][y] - sea)
# ํ๋์ ๊ทธ๋ฃน์ ํ์
return 1
N, M = map(int, input().split())
graph = []
for i in range(N) :
graph.append(list(map(int, input().split())))
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
year = 0
ice = []
for i in range(N) :
for j in range(M) :
if graph[i][j] :
# ๋น์ฐ์ ์์น๋ฅผ (i, j)
ice.append((i, j))
while ice :
visited = [[0] * (M) for _ in range(N)]
delList = []
# bfs() ์์ ๋ฐ์์จ ๋น์ฐ ๊ทธ๋ฃน์ ๊ฐ์
result = 0
for i, j in ice :
# ๋น์ฐ ๊ฐ์ ๋ํ๊ธฐ
if graph[i][j] and not visited[i][j] :
result += bfs(i, j)
# ๋น์ฐ์ด ์๋ค๋ฉด
if graph[i][j] == 0 :
delList.append((i, j))
# ๋น์ฐ ๊ทธ๋ฃน์ด 2๊ฐ ์ด์์ด๋ฉด
if result > 1 :
print(year)
break
# ๋ค ๋
น์ ๋น์ฐ ์ ๊ฑฐ
ice = sorted(list(set(ice) - set(delList)))
year += 1
if result < 2 :
print(0)
# input
# 5 7
# 0 0 0 0 0 0 0
# 0 2 4 5 3 0 0
# 0 3 0 2 5 2 0
# 0 7 6 2 4 0 0
# 0 0 0 0 0 0 0
# output
# 2
3. ํด์ค
์๊ฐ์ด๊ณผ๋ก ๊ณ ์ํ ๋ฌธ์ ..
bfs๋ฅผ ํตํด ์ฐ๊ฒฐ๋ ๋น์ฐ์ ์ฐพ๊ณ , ๋น์ฐ์ ๊ฐ์๋ฅผ ์ผ๋ค.
์๊ฐ์ด๊ณผ ๋ ๋ถ๋ถ์ ๋น์ฐ์ด ๋ น๋ ๊ฒ์ ๋ฐ์ํ ๋ ๋ฐ์ํ๊ณ , ํด๋น ๋ถ๋ถ์ ํด๊ฒฐํ๊ธฐ ์ํด bfs๋ฅผ ์คํํ ๋ ๋น์ฐ์ ์์น์ ๋ น๋ ์์ ๋ฐ์ ์ฒ๋ฆฌํด์ฃผ์๋ค.
This post is licensed under CC BY 4.0 by the author.