๋ฌธ์  ์ค๋ช
๋ ๊ฐ์ ๋จ์ด 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 ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ์ฌํญ
๊ฐ ๋จ์ด๋ ์ํ๋ฒณ ์๋ฌธ์๋ก๋ง ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
๊ฐ ๋จ์ด์ ๊ธธ์ด๋ 3 ์ด์ 10 ์ดํ์ด๋ฉฐ ๋ชจ๋  ๋จ์ด์ ๊ธธ์ด๋ ๊ฐ์ต๋๋ค.
words์๋ 3๊ฐ ์ด์ 50๊ฐ ์ดํ์ ๋จ์ด๊ฐ ์์ผ๋ฉฐ ์ค๋ณต๋๋ ๋จ์ด๋ ์์ต๋๋ค.
begin๊ณผ target์ ๊ฐ์ง ์์ต๋๋ค.
๋ณํํ  ์ ์๋ ๊ฒฝ์ฐ์๋ 0๋ฅผ return ํฉ๋๋ค.
์ ์ถ๋ ฅ ์

์ ์ถ๋ ฅ ์ ์ค๋ช
์์  #1
๋ฌธ์ ์ ๋์จ ์์ ๊ฐ์ต๋๋ค.
์์  #2
target์ธ "cog"๋ words ์์ ์๊ธฐ ๋๋ฌธ์ ๋ณํํ  ์ ์์ต๋๋ค.
๋์ ์ฝ๋
function solution(begin, target, words) {
    debugger
    function bfs() {
        const queue = [begin]
        const visit = [begin]
        let count = 0
        while(queue.length) {
            const cur = queue.pop()
            // ํ์ฌ ๋จ์ด์ ๋ค๋ฅธ ์คํ ๋ง์ด 1๊ฐ์ธ ๋จ์ด๋ฅผ ํ์ push
            words.forEach(word => {
                if(!visit.includes(word)) {
                    let diff = 0
                    // ์คํ ๋ง์ด ํ๋ ๋ค๋ฅธ๊ฒ๋ค์ ์ฒดํฌ
                    for(let i = 0 ; i < word.length ; i ++) {
                        if(cur[i] !== word[i]) {
                            diff++
                        }
                    }
                    // ๋ชฉํ ๋จ์ด์ธ์ง ํ์ธ
                    if(diff === 1) {
                        if(target === word && diff === 1) {
                            return count+1
                        } else {
                            queue.push(word)
                            visit.push(word)
                        }
                    }    
                } 
            })
            count++
        }
        return count
    }
    
    // ๋ณํ์ด ๊ฐ๋ฅํ์ง ์ฒดํฌ
    if(words.includes(target)) {
        return bfs()
    } else {
        return 0
    }
}
์ค์ํ ํฌ์ธํธ๋ ํ์ฌ ๋จ์ด์ ๋ค๋ฅธ ์คํ ๋ง์ด 1๊ฐ์ธ ๋จ์ด๋ฅผ ํ์ push ํ๋ ๊ฒ ์ด๋ค.