function solution(begin, target, words) {

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

  
    let queue = [[begin, 0]]; 
    let wordAll = new Set(words); 
    let now = begin;
    let answer = 0;
 
    function findSimilar(word1, word2) {
        let diff = 0;
        for (let i = 0; i < word1.length; i++) {
            if (word1[i] !== word2[i])
                diff++;
            if (diff > 1) return false; 
        }
        return diff === 1; 
    }

  
    while (queue.length > 0) {
        let [current, step] = queue.shift();

      
        if (current === target) return step;

     
        for (let word of wordAll) {
            if (findSimilar(current, word)) {
                queue.push([word, step + 1]); 
                wordAll.delete(word); // 방문한 단어는 Set에서 제거
            }
        }
    }

  
    return 0;
}

아직도 이해가 잘 안 된다.........................

https://school.programmers.co.kr/learn/courses/30/lessons/1844

 

프로그래머스

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

programmers.co.kr

bfs로 문제를 구하는 방법은 정해져잇으니 외워두자 ~.~

 

function solution(maps) {
    var answer = 0;
    const n = maps.length;
    const m = maps[0].length;
    
    const directions = [[0, 1], [1, 0], [0, -1], [-1, 0]]; 
    const queue = [[0,0,1]]; //시작지점도 이동한걸로 보기 때문에 1 Q
    
    const visited = Array.from({length:n},()=>Array(m).fill(false));
    visited[0][0]=true;
    
    while(queue.length>0){
        let [x,y,dist]=queue.shift();
        
        if(x===n-1&&y===m-1)return dist;
        
        for(let [dx,dy] of directions){
            let nx = x+dx;
            let ny = y+dy;
            
            if(nx>=0 && nx<n && ny>=0 && ny<m && maps[nx][ny]!==0 && !visited[nx][ny]){
                  queue.push([nx,ny,dist+1]);//다시 이동한 위치 넣어줌 
                  visited[nx][ny]=true; //방문했으니 true로바꿈 
            }
              
        }
    }
    return -1;
}

+ Recent posts