[프로그래머스 Level 3] 단어 변환
1분 읽기
풀이 1:
function solution(begin, target, words) {
const words_set = new Set(words);
if(!words_set.has(target)) return 0;
function getDiff(word1, word2, max_diff){
let diff = 0;
for(let i = 0; i < word1.length; i++){
if(word1[i] !== word2[i]) diff++;
if(max_diff && diff >= max_diff) return max_diff;
}
return diff;
}
function bfs(begin){
const q = [ [begin, 0] ];
const visited = new Set();
while(q.length){
const [word, steps] = q.shift();
if(word === target) return steps;
if(!visited.has(word)){
visited.add(word);
words_set.forEach(str => {
if(getDiff(str, word, 2) === 1 && !visited.has(str)) {
words_set.delete(str);
q.push([str, steps + 1]);
}
});
}
}
return 0;
}
return bfs(begin);
}DFS/BFS10편 중 4번째
관련 글
4분 읽기
소수 구하기
소수 판별법과 소수를 구하는 알고리즘을 정리합니다.
1분 읽기
[프로그래머스 Level 2] 미로 탈출
프로그래머스 미로 탈출을 BFS로 풀이합니다.
1분 읽기
[프로그래머스 Level 2] 마법의 엘리베이터
프로그래머스 마법의 엘리베이터를 자리수 그리디로 풀이합니다.