[JavaScript] 프로그래머스 - 단어 변환 (3단계)

배똥회장·2022년 8월 4일
0

📝 문제

프로그래머스 > 코딩테스트 연습 > 깊이/너비 우선 탐색(DFS/BFS) > 단어 변환


📝 답안

📌 작성 코드

function solution(begin, target, words) {

    //words에 target이 없으면 0 리턴
    if (words.indexOf(target) == -1) return 0;
    
    //bfs?를 위해 만든 큐
    let queue = new Array();
    
    //나중에 글자 비교를 위해 target을 문자열 배열로 만들기
    target = target.split("");
    
    //words의 문자들도 문자열 배열로 각각 만들어 담기
    for (i = 0; i < words.length; i++) {
        words[i] = words[i].split("");
    }
    
    //큐에 begin 글자와 변형된 횟수인 0을 매개변수로 Word형으로 만들어 담는다
    queue.push(new Word(begin.split(""), 0));
    
    //큐가 0이 될 때까지 반복
    while (queue.length > 0) {
        //큐의 제일 첫번째 항목 가져오기
        let word = queue.shift();
        
        //항목의 글자와 변형 횟수 가져오기
        let arr = word.w;
        let index = word.index;
        
        //만약 글자가 target과 동일하다면 바로 해당 횟수 리턴
        if (check(arr, target) == 0) return index;
        
        //words의 문자들을 하나씩 꺼내면서 글자와 비교
        for (i = 0; i < words.length; i++) {
            let count = words[i].length;
            
            for (j = 0; j < words[i].length; j++) {
                if (arr[j] == words[i][j]) count--;
            }
            
            //만약 글자 차이가 1개 밖에 없으면 큐에 넣으면서 words에서는 삭제
            if (count == 1) {
                queue.push(new Word(words[i], index+1));
                words.splice(i, 1);
            }
        }
    }
    
    //while문이 끝나면 변형할 수 없는 것이기 때문에 0 리턴
    return 0;
}

function check(w1, w2) {
    let count = w1.length;
    for (i = 0; i < w1.length; i++) {
        if (w1[i] == w2[i]) count--;
    }
    return count;
}

class Word {
    constructor(word, i) {
        this.w = word;
        this.index = i;        
    }
}

📌 결과

테스트 1 〉 통과 (0.33ms, 30.1MB)
테스트 2 〉 통과 (0.40ms, 30.2MB)
테스트 3 〉 통과 (0.57ms, 30MB)
테스트 4 〉 통과 (0.20ms, 30.3MB)
테스트 5 〉 통과 (0.10ms, 30.1MB)


📌 새로 알게된 점

자료형을 상관 안하고 그냥 바로 변환하면 되서 너무 편함 흑흑ㅠㅠ

profile
어쩌면 개발자

0개의 댓글