๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์ฝ”ํ…Œ

[์ด์ฝ”ํ…Œ/Python] ์Œ๋ฃŒ์ˆ˜ ์–ผ๋ ค ๋จน๊ธฐ (DFS)

[๋ฌธ์ œ]

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