[๋ฌธ์ ]
N × M ํฌ๊ธฐ์ ์ผ์ ํ์ด ์๋ค. ๊ตฌ๋ฉ์ด ๋ซ๋ ค ์๋ ๋ถ๋ถ์ 0, ์นธ๋ง์ด๊ฐ ์กด์ฌํ๋ ๋ถ๋ถ์ 1๋ก ํ์๋๋ค. ๊ตฌ๋ฉ์ด ๋ซ๋ ค ์๋ ๋ถ๋ถ๋ผ๋ฆฌ ์, ํ, ์ข, ์ฐ๋ก ๋ถ์ด ์๋ ๊ฒฝ์ฐ ์๋ก ์ฐ๊ฒฐ๋์ด ์๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผํ๋ค. ์ด๋ ์ผ์ ํ์ ๋ชจ์์ด ์ฃผ์ด์ก์ ๋ ์์ฑ๋๋ ์ด ์์ด์คํฌ๋ฆผ์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. ๋ค์์ 4 × 5 ์ผ์ ํ ์์์์๋ ์์ด์คํฌ๋ฆผ์ด ์ด 3๊ฐ ์์ฑ๋๋ค.
[์ ๋ ฅ ์กฐ๊ฑด]
- ์ฒซ ๋ฒ์งธ ์ค์ ์ผ์ ํ์ ์ธ๋ก ๊ธธ์ด N๊ณผ ๊ฐ๋ก ๊ธธ์ด M์ด ์ฃผ์ด์ง๋ค.
- ๋ ๋ฒ์งธ ์ค๋ถํฐ N + 1๋ฒ์งธ ์ค๊น์ง ์ผ์ ํ์ ํํ๊ฐ ์ฃผ์ด์ง๋ค.
- ์ด๋ ๊ตฌ๋ฉ์ด ๋ซ๋ ค์๋ ๋ถ๋ถ์ 0, ๊ทธ๋ ์ง ์์ ๋ถ๋ถ์ 1์ด๋ค.
[์ถ๋ ฅ ์กฐ๊ฑด]
- ํ ๋ฒ์ ๋ง๋ค ์ ์๋ ์์ด์คํฌ๋ฆผ์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ค.
[์ ๋ ฅ ์์]
4 5
00110
00011
11111
00000
[์ถ๋ ฅ ์์]
3
[ํ์ด]
# dfs
# 0 ๋ฐ๊ฒฌ
# 1. ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
# 2. ์ํ์ข์ฐ ์ดํผ๊ธฐ (recursive)
# ์ํ์ข์ฐ์ ๊ทธ ์ฌ๊ท ๋
ธ๋๋ค ๋ค 1(False) ๋์ด์ ์ข
๋ฃ๋์ด ๋์์ค๋ฉด(recursive) True ์ฒ๋ฆฌ
# True๋ฉด cnt += 1
# DFS๋ก ํน์ ๋
ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๊ณ ์ฐ๊ฒฐ๋ ๋ชจ๋ ๋
ธ๋๋ค๋ ๋ฐฉ๋ฌธ
def dfs(x, y):
# ๋ฒ์ ๋ฒ์ด๋๋ ๊ฒฝ์ฐ์๋ ์ฆ์ ์ข
๋ฃ
if x < 0 or x > (N-1) or y < 0 or y > (M-1) or graph[x][y] == 1: # graph[x][y] == 1 ์ธ ๊ฒฝ์ฐ๋ ์ฌ๊ท ํจ์๋ก ๋ค์ด๊ฐ์ ๋ IndexError๊ฐ ๋ฐ์ํ ์ ์์ผ๋ ์ ค ๋ง์ง๋ง์ ์จ์ฃผ์.
return False
# ํ์ฌ ๋
ธ๋๋ฅผ ์์ง ๋ฐฉ๋ฌธํ์ง ์์๋ค๋ฉด
if graph[x][y] == 0:
# ํด๋น ๋
ธ๋ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
graph[x][y] = 1
# ์, ํ, ์ข, ์ฐ ์์น๋ค๋ ๋ชจ๋ ์ฌ๊ท์ ์ผ๋ก ํธ์ถ
dfs(x-1, y) # -> ๊ฒฐ๊ณผ True๋ฉด ๊ณ์ ์งํ, False๋ฉด ์ข
๋ฃํด์ ๋์์ด
dfs(x, y-1)
dfs(x+1, y)
dfs(x, y+1)
return True # -> ์ํ์ข์ฐ์ ๊ทธ ๋
ธ๋๋ค์ ์ฃผ๋ณ๋ ๋ค ๊ฒ์ฌํ์ ๋, ๋ค False์ฌ์ ์ข
๋ฃ๋๊ณ ๋์์์ ๋
# return False # -> graph[x][y] == 1 ์ธ ๊ฒฝ์ฐ. ์ฆ, ์๋ 1์ด๊ฑฐ๋ ๋ฐฉ๋ฌธ ์๋ฃํ ๊ฒฝ์ฐ
N, M = map(int, input().split())
graph = []
for i in range(N):
graph.append(list(map(int, input())))
# ๋ชจ๋ ๋
ธ๋(์์น)์ ๋ํด ์๋ฃ์ ์ฑ์ฐ๊ธฐ
result = 0
print(result)
# ๊ฒฐ๊ณผ
# 3
'์ฝํ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ด์ฝํ /Python] DFS / BFS (0) | 2024.05.26 |
---|---|
[SWEA/Python] 1928. Base64 Decoder (0) | 2024.05.19 |