๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ป Programming/์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ…Œ์ŠคํŠธ

[python] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค_๋‹จ์–ด๋ณ€ํ™˜ (DFS&BFS)

by ๋ญ…์ฆค 2022. 2. 6.
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

 

ํ’€์ด

BFS ๋กœ ํ’€ ์ˆ˜ ์žˆ๊ณ , ํ˜„์žฌ ๋‹จ์–ด์™€ words ์ค‘์— ๋‹จ์–ด ํ•˜๋‚˜๋งŒ ๋‹ค๋ฅธ ๊ฒฝ์šฐ์— ํ•ด๋‹น words ๋ฅผ ๋ฐฉ๋ฌธํ•˜๊ณ  ์นด์šดํŠธํ•ด์ค€๋‹ค. ๊ทธ๋ ‡๊ฒŒ ๋ฐ˜๋ณตํ•˜๋‹ค๊ฐ€ ํ˜„์žฌ ๋‹จ์–ด๊ฐ€ target ๋‹จ์–ด์™€ ๊ฐ™์•„ ์ง€๋Š” ์ˆœ๊ฐ„ BFS ์ข…๋ฃŒํ•˜๊ณ  ์นด์šดํŠธํ•œ ์ˆ˜๋ฅผ ๋ฆฌํ„ดํ•ด์ค€๋‹ค.

 

์ฝ”๋“œ

def bfs(begin, target, words, visited):
    count = 0
    stack = [(begin, 0)]
    while stack:
        cur, depth = stack.pop()
        if cur == target:   # target์— ๋„๋‹ฌํ–ˆ์œผ๋ฉด depth ๋ฆฌํ„ด
            return depth
        
        for i in range(len(words)):
            if visited[i] == True:  # ์ด๋ฏธ ์ง€๋‚˜์ณค๋˜ words ์ด๋ฉด ํŒจ์Šค
                continue
            cnt = 0
            for a,b in zip(cur, words[i]):
                if a!=b: # ๋‹ค๋ฅธ ๋‹จ์–ด๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ cnt +=1
                    cnt += 1
            if cnt == 1: # ๋‹จ์–ด๊ฐ€ ํ•˜๋‚˜๋งŒ ๋‹ค๋ฅผ ๋•Œ, ํ•ด๋‹น words ๋ฐฉ๋ฌธํ•˜๊ณ  stack์— ๋‹จ์–ด์™€, depth +1
                visited[i] = True
                stack.append((words[i], depth+1))
                

def solution(begin, target, words):
    answer = 0
    if target not in words:
        return 0

    visited = [False]*(len(words))

    answer = bfs(begin, target, words, visited)

    return

 

๋ฐ˜์‘ํ˜•