반응형
    
    
    
  
                              Notice
                              
                          
                        
                          
                          
                            Recent Posts
                            
                        
                          
                          
                            Recent Comments
                            
                        
                          
                          
                            Link
                            
                        
                    | 일 | 월 | 화 | 수 | 목 | 금 | 토 | 
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 | 
| 9 | 10 | 11 | 12 | 13 | 14 | 15 | 
| 16 | 17 | 18 | 19 | 20 | 21 | 22 | 
| 23 | 24 | 25 | 26 | 27 | 28 | 29 | 
| 30 | 
                            Tags
                            
                        
                          
                          - TCP
 - socket
 - 알고리즘
 - 가천대
 - 문자열
 - typescript
 - 자바스크립트
 - Algorithm
 - 소켓
 - 타입 챌린지
 - dp
 - Crawling
 - 쉬운 문제
 - dfs
 - 그래프
 - 레벨 1
 - 타입스크립트
 - 수학
 - type challenge
 - Node.js
 - 크롤링
 - BFS
 - javascript
 - ip
 - 프로그래머스 레벨 2
 - Nestjs
 - HTTP
 - HTTP 완벽 가이드
 - 프로그래머스
 - 백준
 
                            Archives
                            
                        
                          
                          - Today
 
- Total
 
kakasoo
[node.js] 가장 먼 노드 ( 프로그래머스 레벨3 ) 본문
반응형
    
    
    
  // 프로그래머스 레벨 3 가장 먼 노드를 풀었습니다.
const solution = (n, edge) => {
    const map = new Array(n + 1).fill(0);
    for (let i = 1; i < map.length; i++) {
        map[i] = [];
    }
    edge.forEach((el) => {
        const [from, to] = el;
        map[from].push(to);
        map[to].push(from);
    });
    const visited = new Array(n + 1).fill(0);
    visited[0] = -1;
    const bfs = (start) => {
        const queue = [start];
        visited[start] = 1;
        while (queue.length) {
            const cur = queue.shift();
            for (let i = 0; i < map[cur].length; i++) {
                const next = map[cur][i];
                if (!visited[next] || visited[next] > visited[cur] + 1) {
                    queue.push(next);
                    visited[next] = visited[cur] + 1;
                }
            }
        }
    };
    bfs(1);
    const maxValue = Math.max(...visited);
    return visited.filter((el) => el === maxValue).length;
};
그래프 문제는 항상 비슷한 코드로 작성되기 때문에 사실 레벨3이라기엔 쉽다.
어떤 모양의 맵을 만들고, bfs인지 dfs인지 결정하고,
visited를 어떻게 체크할 것인지,
전체 배열에 대해서 진행할 것인지, 아니면 특정한 점에서만 시작을 할 것인지 ( 이 문제는 1번 노드에서 출발했다. )
이러한 부분들만 결정해주면 된다.
반응형
    
    
    
  '프로그래밍 > 알고리즘 풀이' 카테고리의 다른 글
| [node.js] 캐시 ( 프로그래머스 레벨2 ) (4) | 2021.07.05 | 
|---|---|
| [node.js] 점프와 순간 이동 ( 프로그래머스 레벨2 ) (0) | 2021.07.05 | 
| [node.js] 방문 길이 ( 프로그래머스 레벨2 ) (0) | 2021.07.02 | 
| [node.js] 괄호 회전하기 ( 프로그래머스 레벨2 ) (0) | 2021.07.01 | 
| [node.js] 쿼드 압축 후 개수 세기 ( 프로그래머스 레벨2 ) (0) | 2021.07.01 |