https://programmers.co.kr/learn/courses/30/lessons/12978

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ๋ฐฐ๋‹ฌ

5 [[1,2,1],[2,3,3],[5,2,2],[1,4,2],[5,3,1],[5,4,2]] 3 4 6 [[1,2,1],[1,3,2],[2,3,2],[3,4,3],[3,5,2],[3,5,3],[5,6,1]] 4 4

programmers.co.kr

 

 

 

 

 

์–ผ๋งˆ์ „์— ํ’€์—ˆ๋˜ '๊ฐ€์žฅ ๋จผ ๋…ธ๋“œ' ๋ฌธ์ œ(https://programmingiraffe.tistory.com/30)์™€ ๋น„์Šทํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ด์„œ bfs๋กœ ํ’€์—ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ฑ„์ ์„ ๋Œ๋ฆฌ๋ฉด 50%์˜ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค๋งŒ ํ†ต๊ณผํ•œ๋‹ค.

 

'๊ฐ€์žฅ ๋จผ ๋…ธ๋“œ' ๋ฌธ์ œ์—์„œ๋Š” ๋ชจ๋“  ๋…ธ๋“œ์˜ ๊ฐ€์ค‘์น˜๊ฐ€ 1์ด์—ˆ๋Š”๋ฐ, ์ด ๋ฌธ์ œ์—์„œ๋Š” ๊ฐ€์ค‘์น˜๊ฐ€ ๋‹ฌ๋ผ ๊ฑฐ์ณ๊ฐ€๋Š” ๊ฒฝ์šฐ ์ตœ์†Œ๊ฐ’์„ ๊ฐฑ์‹ ํ•ด์ค˜์•ผํ•˜๋Š”๋ฐ ์•ˆ๋˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค..

 

๊ฒฐ๊ตญ ๋” ๋ณต์žกํ•˜์ง€๋งŒ ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ํ’€์–ด์ค˜์•ผ ํ•œ๋‹ค.

 

 

 

 

 

BFS๋กœ ํ‘ผ ํ’€์ด(๋ชจ๋“  tc ํ†ต๊ณผ X)

import java.util.*;

class Solution {
    static final int INF = 50000001;
    static int[][] graph;
    static boolean[] visited;
    static int[] dist;
    
    public int solution(int N, int[][] road, int K) {
        graph = new int[N + 1][N + 1];
        for(int a[] : graph) {
            Arrays.fill(a, INF);
        }
        
        visited = new boolean[N + 1];
        
        dist = new int[N + 1];
        Arrays.fill(dist, Integer.MAX_VALUE);
        
        for(int i = 0; i < road.length; i++) {
            int a = road[i][0];
            int b = road[i][1];
            int c = road[i][2];
            
            graph[a][b] = Math.min(graph[a][b], c);
            graph[b][a] = Math.min(graph[b][a], c);
        }
        
        bfs(1);
        
        int answer = 0;
        for(int i = 1; i < N + 1; i++) {
            if(dist[i] <= K) {
                answer++;
            }
        }

        return answer;
    }
    
    public void bfs(int v) {
        Queue<Integer> q = new LinkedList<>();
        
        q.add(v);
        visited[v] = true;
        dist[1] = 0;
        
        while(!q.isEmpty()) {
            int p = q.poll();
            
            for(int i = 1; i < graph.length; i++) {
                if(graph[p][i] != INF && !visited[i]) {
                    q.offer(i);
                    visited[i] = true;
                    dist[i] = Math.min(dist[i], dist[p] + graph[p][i]);
                }
            }
        }
    }
}

 

 

 

 

 

๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜

import java.util.*;

class Node implements Comparable<Node> {
    int to;
    int weight;
    
    Node(int to, int weight) {
        this.to = to;
        this.weight = weight;
    }
    
    @Override
    public int compareTo(Node o) {
		return Integer.compare(this.weight, o.weight);
	}
}

class Solution {
    static List<Node>[] list;
    static boolean[] visited;
    static int[] dist;
    
    public int solution(int N, int[][] road, int K) {
        list = new ArrayList[N + 1];
        for(int i = 1; i < N + 1; i++) {
            list[i] = new ArrayList<>();
        }
        
        visited = new boolean[N + 1];
        
        dist = new int[N + 1];
        Arrays.fill(dist, Integer.MAX_VALUE);
        
        for(int i = 0; i < road.length; i++) {
            int a = road[i][0];
            int b = road[i][1];
            int c = road[i][2];
            
            list[a].add(new Node(b,c));
			list[b].add(new Node(a,c));
        }
        
        dijkstra(1);
        
        int answer = 0;
        for(int i = 1; i < N + 1; i++) {
            if(dist[i] <= K) {
                answer++;
            }
        }

        return answer;
    }
    
    public void dijkstra(int start) {
        Queue<Node> q = new PriorityQueue<>();
        
        q.add(new Node(start,0));
        dist[start] = 0;
        
        while(!q.isEmpty()) {
            Node node = q.poll();
            int to = node.to;
            
            if(visited[to]) {
                continue;
            } else {
                visited[to] = true;
            } 
            
            for(Node next : list[to]) {
				if(dist[next.to]  >= dist[to] + next.weight) {
					dist[next.to] = dist[to] + next.weight;
					q.add(new Node(next.to, dist[next.to]));
				}
			}
        }
    }
}

 

 

 

 

 

 

์ฐธ๊ณ 

๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜ https://loosie.tistory.com/146

giraffe_