[JavaScript] 단어 변환

2022. 9. 26. 00:35Algorithm/프로그래머스

level : 3
문제 링크 : 단어 변환

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

My Solution

function solution(begin, target, words) {
    let answer = 0;
    words = new Set(words);
    if(!words.has(target))
        return answer;
    let queue = [[begin, 0]];
    while(queue.length>0){
        const [word, num] = queue.shift();
        if(word === target){
            answer = num;
            break;
        }
        for(let i of words){
            let counter = 0;
            i.split('').forEach((char,index)=>{
                if(char!==word[index])
                    counter++;
            })
            if(counter===1){
                queue.push([i,num+1]);
                words.delete(i);
            }
        }
    }
    return answer;
}


풀이방법
answer를 0으로 초기화 한다.
words에 target이 없다면 answer를 반환한다.
queue에 [단어, 단계]의 배열을 원소로 가지는 2차원 배열을 만든다. [[begin, 0]]으로 초기화한다.
queue의 길이가 0보다 클때까지 아래의 내용을 반복한다.
word, num을 queue에서 Dequeue하여 나온 값으로 초기화한다. 이 때, word가 target과 같다면 num을 answer에 할당하고 반복문을 종료한다.
word에 있는 단어들을 비교하여 1개의 알파벳만 다른 것과 num+1을 queue에 Enqueue한다.

반복문 종료 후, answer를 return한다.

느낀점
이 문제에서 테스트 케이스가 완벽하지 않다고 느꼈다.

begin(string) = "hit", target(string) = "cog", words(string[]) = ["hot", "dot", "cog"], Return = 0

아래의 solution은 위에서의 solution을 약간 변형했고 위의 testcase를 통과하지 못한다. 하지만 제출하면 통과가 된다. (문제의 오류인가 출제자의 실수인가.. 잘은 모르겠다.)

function solution(begin, target, words) {
    words = new Set(words);
    if(!words.has(target))
        return 0;
    let queue = [[begin, 0]];
    while(queue.length>0){
        const [word, num] = queue.shift();
        if(word === target)
        	return num;
        for(let i of words){
            let counter = 0;
            i.split('').forEach((char,index)=>{
                if(char!==word[index])
                    counter++;
            })
            if(counter===1){
                queue.push([i,num+1]);
                words.delete(i);
            }
        }
    }
}

생각해 보니 words.delete(i) 부분은 굳이 필요 없는 부분이었다. 그러니 굳이 words를 Set Object로도 안 바꾸어도 되는 문제였다.. 다음에는 신경써서 판별해야 겠다.

'Algorithm > 프로그래머스' 카테고리의 다른 글

[JavaScript] 혼자 놀기의 달인  (0) 2023.04.22
[Python] 숫자 짝꿍  (0) 2022.10.20
[JavaScript] 다음 큰 숫자  (0) 2022.09.25
[JavaScript] 야근 지수  (0) 2022.09.17
[JavaScript] 베스트앨범  (0) 2022.09.17