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

๋ฌธ์ œ ์„ค๋ช…

๋‘ ๊ฐœ์˜ ๋‹จ์–ด begin, target๊ณผ ๋‹จ์–ด์˜ ์ง‘ํ•ฉ words๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์€ ๊ทœ์น™์„ ์ด์šฉํ•˜์—ฌ begin์—์„œ target์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฐ€์žฅ ์งง์€ ๋ณ€ํ™˜ ๊ณผ์ •์„ ์ฐพ์œผ๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

1. ํ•œ ๋ฒˆ์— ํ•œ ๊ฐœ์˜ ์•ŒํŒŒ๋ฒณ๋งŒ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 2. words์— ์žˆ๋Š” ๋‹จ์–ด๋กœ๋งŒ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด begin์ด "hit", target๊ฐ€ "cog", words๊ฐ€ ["hot","dot","dog","lot","log","cog"]๋ผ๋ฉด "hit" -> "hot" -> "dot" -> "dog" -> "cog"์™€ ๊ฐ™์ด 4๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‘ ๊ฐœ์˜ ๋‹จ์–ด begin, target๊ณผ ๋‹จ์–ด์˜ ์ง‘ํ•ฉ words๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ์ตœ์†Œ ๋ช‡ ๋‹จ๊ณ„์˜ ๊ณผ์ •์„ ๊ฑฐ์ณ begin์„ target์œผ๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.

 

 

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

    def dfs(begin, words, depth,answer):
        depth += 1
        nextWords = []
        if begin == target:
            if depth <= answer:
                answer = depth
            return answer

        for word in words:
            count = 0
            for index, char in enumerate(word):
                if begin[index] != char:
                    count += 1
            if count == 1:
                nextWords.append(word)

        newSearchWords = words[:]
        if begin in newSearchWords:
            newSearchWords.remove(begin)

        for begin in nextWords:
            answer = dfs(begin, newSearchWords, depth,answer)

        return answer

    answer = dfs(begin, words, depth,answer)

    return answer

 

๋ฌธ์ œ์˜ ํ•ต์‹ฌ:

ํ”„๋กœ์„ธ์Šค๋Š” ๋ฌธ์ œ์˜ ์ตœ์ ํ•ด๋ฅผ ๊ณง๋ฐ”๋กœ ์ฐพ๋Š” ๋ฐฉ์‹์ด ์•„๋‹ˆ๋ผ,

์ตœ์ ์˜ ํ•ด๋ฅผ ๊ตฌํ•ด๊ฐ€๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๊ณ , ๊ณ„์† ์ตœ์ ํ•ด๋ฅผ ๊ตํ™˜ํ•ด๊ฐ€๋Š” ๋ฐฉ์‹์ด๋‹ค. 

๋ฐ˜์‘ํ˜•