๐Ÿงฉ Algorithm/[BOJ] Silver

[BOJ] 2667. ๋‹จ์ง€๋ฒˆํ˜ธ๋ถ™์ด๊ธฐ (Python/DFS/Silver 1)

devCloud 2026. 4. 3. 15:54
728x90

[Baekjoon] 2667. ๋‹จ์ง€๋ฒˆํ˜ธ๋ถ™์ด๊ธฐ

Silver 1 | #DFS #๊ทธ๋ž˜ํ”„ํƒ์ƒ‰

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))๋กœ ๋‹จ์ง€ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ด ์ฝ”๋“œ๋ฅผ ๊ฐ„๊ฒฐํ™”ํ–ˆ๋‹ค.
  • ๋ฌธ์ œ์˜ ์กฐ๊ฑด(์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ ์ถœ๋ ฅ)์„ ๋‹ค์‹œ ํ•œ๋ฒˆ ํ™•์ธํ•˜๋Š” ์Šต๊ด€์„ ๋“ค์˜€๋‹ค.
728x90