단어 변환 자바스크립트

HyosikPark·2020년 12월 13일
0

알고리즘

목록 보기
63/72
function solution(begin, target, words) {
    if(!words.includes(target)) return 0;
    let answer = 0;
    let usedWords = new Set();
    let toConvert = [begin];
    let converted = [];
    
    while(true){
    
    toConvert.forEach(e => usedWords.add(e));
    answer++;
    for(let i = 0; i < toConvert.length; i++) {
            for(let j = 0; j < toConvert[i].length; j++) {
                let spliceWord = toSplice(toConvert[i],j)
                let match = words.filter(e => !usedWords.has(e) && toSplice(e,j) == spliceWord);
                converted.push(...match) 
            }
        if(converted.includes(target)) return answer;
    }
        toConvert = converted;
        converted = [];
        }
}

function toSplice(word,index) {
    let temp = word.split('');
    temp.splice(index,1);
    return temp.join('');
}

해설

접근방법
변환 해야할 단어들을 toConvert 배열에 넣는다. 가장 처음에는 begin 단어가 들어가게 된다.

toConvert 배열의 단어들을 모두 검사하여 다음 단어로 올 수 있는 모든 단어를 converted 배열에 넣는다.

converted 배열의 요소들을 toConvert 배열로 옮겨주고 converted 배열은 다시 0으로 만들어 위 과정을 반복한다.

이때 toConvert의 요소들은 이미 사용된 단어들이고 변환대상이 될 수 없으므로 set에 저장하여 필터링을 위해 사용한다.

while(true)반복문의 초기에 먼저 answer++해주고, converted 배열에 원하는 정답이 있다면 answer을 리턴한다.

참고

https://medium.com/@jjnooys/javascript-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EB%8B%A8%EC%96%B4-%EB%B3%80%ED%99%98-dfs-bfs-18d29a699800

0개의 댓글