[JS][프로그래머스 -LEVEL 3 - 가장 먼 노드]

정대만·2024년 1월 14일

코딩테스트

목록 보기
50/51

단순한 bfs 문제이다.

  • bfs 를 while 문으로 푸는데 있어 헷갈리는점이 생겨서 작성한다.
  • bfs 는 dfs 와 다르게 위에서부터 밑으로가는 한길이 아니라 여러 샛길로 빠지는 형태라고 생각하면 편하다.
  • 따라서 queue 에 채워질때 . visted 하는 경우는 > 이길이 그 "노드" 한테는 가장 빨리 가는 길이라고 알려주기 때문에 visted 를 해주면 다시 안가도 된다. (이부분이 헷갈려서 코드가 이상해짐)
  • 코드를 시작할때 queue 를 비우고 시작하면 while 문이 안되기 때문에 queue 에 시작하는 길을 넣는데 이때 visted 에도 이 시작하는 노드도 다시 가면안된다고 알려주면 된다.
function solution(n, edge) {
    var queue=[[1,0]];
    const oob= new Array(n+1).fill().map(_ => []);
    for(var i=0; i<edge.length; i++){
        var [start,end]=edge[i];
        oob[start].push(end);
        oob[end].push(start);
    }
    
    var check_edge=Array.from({length:n+1}).fill(0);
    check_edge[1]=1;
    var max_distance=Array.from({length:n+1}).fill(0);;
    
    while(queue.length>0){
     
        var [queue_start,distance]=queue.shift();
        max_distance[queue_start]=distance;
   
            for(let neihbor of oob[queue_start]){
            
                if(check_edge[neihbor]==0){
                  check_edge[neihbor]=1;
                queue.push([neihbor,distance+1]);
                     }
            }
        }

  var maxx_distance= Math.max(... max_distance );
  max_distance=  max_distance.filter((el)=> el==maxx_distance);
    return max_distance.length
   
}

const oob= new Array(n+1).fill().map(_ => []);

obj key:value 형식으로 안해도 이런식으로 채울수 있구나를 알려준다.

profile
안녕하세요

0개의 댓글