본문 바로가기

프로그램 강좌

[프로그래머스]단어변환 - javascript

예시

ㅇㅇ

첫번째 시도

왜 자꾸 틀린값이 나올까 궁금했는데 값을 확인해보니 레벨값을 안정해줘서 무조건 카운트 하는거였네요.

function solution(begin, target, words) {
    var answer = 0; // 카운트
    let ch = []; //방문여부
    let queue = [];

    if(!words.includes(target)) return 0;

    queue.push(begin);
    while(queue.length){
        let v = queue.shift();
        let len = queue.length;

        if(v===target) return answer;
        words.forEach(word => { 
            let notEqual = 0;
            if(ch.includes(word)) return; 
            for(let i=0;i<word.length;i++){ 
                if(v[i]!==word[i]) notEqual++; 
            }
            if(notEqual===1){ 
                queue.push(word); 
                console.log(queue);
                ch.push(word); 
                answer++; 
            }
        })
    }
    return answer;
}

두번째 시도

안타깝게도 원인은 알았으나, 다른 분의 코드를 참고해서 이해했습니다.
값을 하나씩만 밀어넣는게 아니라 배열형태로 옆에 레벨값을 표기해주는군요.

function solution(begin, target, words) {
    let answer = 0;
    let ch = [];
    let queue = [];

    if (!words.includes(target)) return 0;

    queue.push([begin, answer]);
    //console.log(queue);
    while (queue) {
        let [v, L] = queue.shift();

        if (v === target) return L;
        words.forEach((word) => {
            let notEqual = 0;

            if (ch.includes(word)) return;

            for (let i = 0; i < word.length; i++) {
                if (word[i] !== v[i]) notEqual++;
            }
            if (notEqual === 1) {
                queue.push([word, L+1]);
                console.log(queue);
                ch.push(word);
            }
        });
    }
    return answer;
}
728x90