diff --git "a/week12_0605/\354\230\244\353\252\251.java" "b/week12_0605/\354\230\244\353\252\251.java" index 86c0803..d09eaba 100644 --- "a/week12_0605/\354\230\244\353\252\251.java" +++ "b/week12_0605/\354\230\244\353\252\251.java" @@ -83,7 +83,7 @@ static boolean find(int[][] board, int row, int col, int target) { return false; } - static boolean inRange(int num) { - return num < + static boolean inRange(int a, int b, int c, int d, int e, int f) { + return a < 19 && b < 19 && c < 19 && d < 19 && e < 19 && f < 19 && a >= 0 && b >= 0 && c >= 0 && d >= 0 && e >= 0 && f >= 0; } } diff --git "a/week14_0617/\354\265\234\354\206\214\353\271\204\354\232\251\352\265\254\355\225\230\352\270\260.java" "b/week14_0617/\354\265\234\354\206\214\353\271\204\354\232\251\352\265\254\355\225\230\352\270\260.java" new file mode 100644 index 0000000..0999c2c --- /dev/null +++ "b/week14_0617/\354\265\234\354\206\214\353\271\204\354\232\251\352\265\254\355\225\230\352\270\260.java" @@ -0,0 +1,63 @@ +package week14_0617; + +import java.io.*; +import java.util.*; + +public class 최소비용구하기 { + static class Node { + int vertex; + int dist; + + Node(int vertex, int dist) { + this.vertex = vertex; + this.dist = dist; + } + } + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + int N = Integer.parseInt(br.readLine()); + int M = Integer.parseInt(br.readLine()); + + ArrayList> graph = new ArrayList<>(); + for (int i = 0; i <= N; i++) { + graph.add(new ArrayList<>()); + } + + for (int i = 0; i < M; i++) { + StringTokenizer st = new StringTokenizer(br.readLine()); + int start = Integer.parseInt(st.nextToken()); + int end = Integer.parseInt(st.nextToken()); + int cost = Integer.parseInt(st.nextToken()); + + graph.get(start).add(new Node(end, cost)); + } + + StringTokenizer st = new StringTokenizer(br.readLine()); + int start = Integer.parseInt(st.nextToken()); + int end = Integer.parseInt(st.nextToken()); + + int[] dist = new int[N + 1]; + Arrays.fill(dist, Integer.MAX_VALUE); + dist[start] = 0; + + PriorityQueue pq = new PriorityQueue<>((o1, o2) -> o1.dist - o2.dist); + pq.offer(new Node(start, 0)); + + while (!pq.isEmpty()) { + Node curNode = pq.poll(); + + if (dist[curNode.vertex] < curNode.dist) continue; + + for (Node adjNode : graph.get(curNode.vertex)) { + if (dist[adjNode.vertex] > curNode.dist + adjNode.dist) { + dist[adjNode.vertex] = curNode.dist + adjNode.dist; + + pq.offer(new Node(adjNode.vertex, dist[adjNode.vertex])); + } + } + } + + System.out.println(dist[end]); + } +} diff --git "a/week14_0617/\355\212\271\354\240\225\352\261\260\353\246\254\354\235\230\353\217\204\354\213\234\354\260\276\352\270\260.java" "b/week14_0617/\355\212\271\354\240\225\352\261\260\353\246\254\354\235\230\353\217\204\354\213\234\354\260\276\352\270\260.java" new file mode 100644 index 0000000..887c665 --- /dev/null +++ "b/week14_0617/\355\212\271\354\240\225\352\261\260\353\246\254\354\235\230\353\217\204\354\213\234\354\260\276\352\270\260.java" @@ -0,0 +1,76 @@ +package week14_0617; + +import java.io.*; +import java.util.*; + +public class 특정거리의도시찾기 { + static class Node { + int vertex; + int dist; + + Node(int vertex, int dist) { + this.vertex = vertex; + this.dist = dist; + } + } + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + StringBuilder sb = new StringBuilder(); + StringTokenizer st; + + st = new StringTokenizer(br.readLine()); + int N = Integer.parseInt(st.nextToken()); // 도시의 개수 + int M = Integer.parseInt(st.nextToken()); // 도로의 개수 + int K = Integer.parseInt(st.nextToken()); // 거리 정보 + int X = Integer.parseInt(st.nextToken()); // 출발 도시 번호 + + ArrayList> graph = new ArrayList<>(); + + for (int i = 0; i <= N; i++) { + graph.add(new ArrayList<>()); + } + + for (int i = 0; i < M; i++) { + st = new StringTokenizer(br.readLine()); + int a = Integer.parseInt(st.nextToken()); + int b = Integer.parseInt(st.nextToken()); + + graph.get(a).add(new Node(b, 1)); + } + + int[] dist = new int[N + 1]; + + Arrays.fill(dist, Integer.MAX_VALUE); + dist[X] = 0; + + PriorityQueue pq = new PriorityQueue<>((o1, o2) -> o1.dist - o2.dist); + pq.add(new Node(X, 0)); + + while (!pq.isEmpty()) { + Node curNode = pq.remove(); + + if (dist[curNode.vertex] < curNode.dist) continue; + + for (Node adjNode : graph.get(curNode.vertex)) { + if (dist[adjNode.vertex] > curNode.dist + adjNode.dist) { + dist[adjNode.vertex] = curNode.dist + adjNode.dist; + + pq.add(new Node(adjNode.vertex, dist[adjNode.vertex])); + } + } + } + + for (int i = 1; i < dist.length; i++) { + if (dist[i] == K) { + sb.append(i).append("\n"); + } + } + + if (sb.length() == 0) { + System.out.println(-1); + } else { + System.out.println(sb); + } + } +}