๋ฌธ์ ์ค๋ช
๋ ๊ฐ์ ๋จ์ด 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 ํ๋ ๊ฒ ์ด๋ค.