From 3b4a163b6a7ac5886f5b841aa9c41c42065a020d Mon Sep 17 00:00:00 2001 From: LiiNi-coder <97495437+LiiNi-coder@users.noreply.github.com> Date: Tue, 2 Sep 2025 23:47:11 +0900 Subject: [PATCH] =?UTF-8?q?[20250902]=20BOJ=20/=20G3=20/=20=EB=82=98?= =?UTF-8?q?=EB=A7=8C=20=EC=95=88=EB=90=98=EB=8A=94=20=EC=97=B0=EC=95=A0=20?= =?UTF-8?q?/=20=EC=9D=B4=EC=9D=B8=ED=9D=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...0\353\212\224 \354\227\260\354\225\240.md" | 90 +++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 "LiiNi-coder/202509/02 BOJ \353\202\230\353\247\214 \354\225\210\353\220\230\353\212\224 \354\227\260\354\225\240.md" diff --git "a/LiiNi-coder/202509/02 BOJ \353\202\230\353\247\214 \354\225\210\353\220\230\353\212\224 \354\227\260\354\225\240.md" "b/LiiNi-coder/202509/02 BOJ \353\202\230\353\247\214 \354\225\210\353\220\230\353\212\224 \354\227\260\354\225\240.md" new file mode 100644 index 00000000..bfe66962 --- /dev/null +++ "b/LiiNi-coder/202509/02 BOJ \353\202\230\353\247\214 \354\225\210\353\220\230\353\212\224 \354\227\260\354\225\240.md" @@ -0,0 +1,90 @@ +```java +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.PriorityQueue; +import java.util.StringTokenizer; + +public class Main { + private static BufferedReader br; + private static int n; + private static int m; + private static char[] genders; + private static ArrayList[] graph; + + private static class Edge implements Comparable { + int v; + int w; + public Edge(int v, int w) { + this.v = v; + this.w = w; + } + @Override + public int compareTo(Edge o) { + return this.w - o.w; + } + } + + public static void main(String[] args) throws IOException { + br = new BufferedReader(new InputStreamReader(System.in)); + StringTokenizer st = new StringTokenizer(br.readLine()); + n = Integer.parseInt(st.nextToken()); + m = Integer.parseInt(st.nextToken()); + genders = new char[n + 1]; + st = new StringTokenizer(br.readLine()); + for (int i = 1; i <= n; i++) { + genders[i] = st.nextToken().charAt(0); + } + graph = new ArrayList[n + 1]; + for (int i = 1; i <= n; i++) { + graph[i] = new ArrayList<>(); + } + for (int i = 0; i < m; i++) { + st = new StringTokenizer(br.readLine()); + int u = Integer.parseInt(st.nextToken()); + int v = Integer.parseInt(st.nextToken()); + int w = Integer.parseInt(st.nextToken()); + //같은 성별 노드는 연결하지 않음 + if (genders[u] == genders[v]) continue; + graph[u].add(new Edge(v, w)); + graph[v].add(new Edge(u, w)); + } + + int answer = prim(); + System.out.println(answer); + } + + private static int prim() { + boolean[] visited = new boolean[n + 1]; + PriorityQueue pq = new PriorityQueue<>(); + int total = 0; + int count = 0; + visited[1] = true; + count++; + for (Edge e : graph[1]) { + pq.add(e); + } + + while (!pq.isEmpty()) { + Edge cur = pq.poll(); + if (visited[cur.v]) continue; + visited[cur.v] = true; + total += cur.w; + count++; + for (Edge next : graph[cur.v]) { + if (!visited[next.v]) { + pq.add(next); + } + } + } + + if (count == n) { + return total; + } else { + return -1; + } + } +} + +```