1. ๋ฌธ์ ์์ฝ

์ ์ฌ๊ฐํ ๋ชจ์์ ์ง๋์์ 1(์ง์ด ์๋ ๊ณณ)์ด ์ํ์ข์ฐ๋ก ์ฐ๊ฒฐ๋ ๊ทธ๋ฃน(๋จ์ง)์ ์ฐพ๊ณ , ๊ฐ ๋จ์ง์ ์ํ๋ ์ง์ ์๋ฅผ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ์ฌ ์ถ๋ ฅํ๋ ๋ฌธ์ ์ด๋ค.
2. ๋ฌธ์ ํ์ด ๋ฐฉ์
- DFS(๊น์ด ์ฐ์ ํ์): ์ง๋๋ฅผ ์ํํ๋ฉฐ 1์ ๋ฐ๊ฒฌํ๋ฉด DFS๋ฅผ ์์ํ๋ค.
- ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ: ํ์ํ ์ง์ ๋ค์ ๋ฐฉ๋ฌธํ์ง ์๋๋ก
0์ผ๋ก ๊ฐ์ ๋ณ๊ฒฝํ๋ค. - ์ํ์ข์ฐ ์ด๋:
dx, dy๋ฐฐ์ด์ ํ์ฉํด ์ธ์ ํ ์ขํ๋ฅผ ํ์ํ๋ค.
3. ์ ์ฒด ์ฝ๋ (Python)
import sys
input = sys.stdin.readline
N = int(input())
graph = [list(map(int, input().strip())) for _ in range(N)]
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
home = [] # ๊ฐ ๋จ์ง์ ์ง ์๋ฅผ ๋ด์ ๋ฆฌ์คํธ
def dfs(i, j):
cnt = 1 # ํ์ฌ ์์น์ ์ง ์นด์ดํธ
graph[i][j] = 0 # ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
for k in range(4):
nx, ny = i + dx[k], j + dy[k]
# ์ง๋ ๋ฒ์ ๋ด์ ์๊ณ , ์์ง ๋ฐฉ๋ฌธํ์ง ์์ ์ง(1)์ธ ๊ฒฝ์ฐ
if 0 <= nx < N and 0 <= ny < N and graph[nx][ny] == 1:
# ์ฌ๊ท์ ์ผ๋ก ํ์ํ๋ฉฐ ๋ฐํ๋ ์ง์ ์๋ฅผ ํ์ฌ cnt์ ๋์
cnt += dfs(nx, ny)
return cnt
# ์ง๋๋ฅผ ์ ์ฒด ์ํํ๋ฉฐ ๋จ์ง ํ์
for i in range(N):
for j in range(N):
if graph[i][j] == 1:
home.append(dfs(i, j))
# ๊ฒฐ๊ณผ ์ถ๋ ฅ
print(len(home)) # ๋จ์ง ์
for i in sorted(home): # ์ค๋ฆ์ฐจ์ ์ ๋ ฌ ์กฐ๊ฑด ํ์
print(i)
4. โ๏ธ ํ๊ณ : ์ํ์ฐฉ์ค์ ์ฑ์ฅ ๊ธฐ๋ก
๐ซ ์ํ์ฐฉ์ค: ๋งค๊ฐ๋ณ์์ ๋ฆฌํด๊ฐ์ ํจ์
์ด๊ธฐ ํ์ด์์ cnt๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋๊ฒผ์ผ๋, ํ์ด์ฌ์ ์ ์(int)๋ ๋ถ๋ณ(immutable) ํ์
์ด๋ผ ์ฌ๊ท ํธ์ถ ํ์ ๋ณ๊ฒฝ ์ฌํญ์ด ๋ถ๋ชจ ํจ์์ ๋ฐ์๋์ง ์์๋ค. ๋ํ cnt += dfs(nx, ny)์ฒ๋ผ ๋ฐํ๊ฐ์ ๋์ ํ์ง ์์ ๋ฐ์ดํฐ๊ฐ ์ ์ค๋์๋ค. ์ด๋ฅผ ํด๊ฒฐํ๋ฉฐ ์ฌ๊ท ๊ตฌ์กฐ์์์ ๋ฐ์ดํฐ ํ๋ฆ์ ๋ช
ํํ ์ดํดํ๊ฒ ๋์๋ค.
โ BFS์์ DFS๋ก: ๋๊ตฌ๋ฅผ ์ ํํ๋ ๊ธฐ์ค
๊ณผ๊ฑฐ ํ์ด(#163)์์๋ ๋จ์ํ ์ต์ํ BFS(ํ)๋ฅผ ์ฌ์ฉํ์๋ค. ํ์ง๋ง ์ด๋ฒ์ DFS(์ฌ๊ท)๋ฅผ ์ ํํ๋ฉฐ ์ํฉ์ ๋ง๋ ์๊ณ ๋ฆฌ์ฆ ๊ธฐ์ค์ ์ธ์ธ ์ ์์๋ค.
- • BFS(๊ณผ๊ฑฐ): ํ ์ ์ธ์ด ํ์ํ๊ณ ๋จ๊ณ๋ณ ํ์์ ์ ๋ฆฌํ์ง๋ง, ์ด ๋ฌธ์ ์ฒ๋ผ ๋จ์ ์์ญ ํฌ๊ธฐ ๊ณ์ฐ์ ์ฝ๋๊ฐ ๋ค์ ๊ธธ์ด์ง๋ค.
- • DFS(ํ์ฌ): ์ฌ๊ท์ ๋ฐํ๊ฐ์ ์ด์ฉํด ๋ณ๋ ์๋ฃ๊ตฌ์กฐ ์์ด๋ ์์ญ ํฌ๊ธฐ๋ฅผ ํจ์ฌ ์ปดํฉํธํ๊ฒ ์ฐ์ถ ๊ฐ๋ฅํ๋ค.
- • ๊ฒฐ๋ก : ์ต๋จ ๊ฑฐ๋ฆฌ ํ์์ BFS, ์ฐ๊ฒฐ๋ ์์ญ์ ํฌ๊ธฐ ํ๋ณ์ DFS๊ฐ ๋ ํจ์จ์ ์์ ์ฒด๋ํ๋ค.
๐ก ๋ง๋ฌด๋ฆฌ ํฌ์ธํธ
- ๋ณ๋์
area๋ณ์ ์์ด ๋ฆฌ์คํธ ๊ธธ์ด(len(home))๋ก ๋จ์ง ์๋ฅผ ๋ฐํํด ์ฝ๋๋ฅผ ๊ฐ๊ฒฐํํ๋ค. - ๋ฌธ์ ์ ์กฐ๊ฑด(์ค๋ฆ์ฐจ์ ์ ๋ ฌ ์ถ๋ ฅ)์ ๋ค์ ํ๋ฒ ํ์ธํ๋ ์ต๊ด์ ๋ค์๋ค.
'๐งฉ Algorithm > [BOJ] Silver' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [BOJ] 2178. ๋ฏธ๋ก ํ์ (Python/BFS/Silver 1) (0) | 2026.04.06 |
|---|---|
| [BOJ] 11724. ์ฐ๊ฒฐ ์์์ ๊ฐ์ (Python/DFS/Silver 2) (0) | 2026.04.03 |
| [BOJ] 1303. ์ ์ - ์ ํฌ (Python/๊ทธ๋ํํ์/Silver 1) (0) | 2024.11.16 |
| [BOJ] 5212. ์ง๊ตฌ ์จ๋ํ (Python/๊ตฌํ/Silver 2) (0) | 2024.11.07 |
| [BOJ] 5635. ์์ผ (Python/๊ตฌํ/Silver 5) (0) | 2024.11.06 |