๋ฐฑ์ค€1647๐Ÿ™๏ธ : ๋„์‹œ๋ถ„ํ• ๊ณ„ํš

๊ธ๊ธยท2025๋…„ 9์›” 24์ผ

์•Œ๊ณ ๋ฆฌ์ฆ˜

๋ชฉ๋ก ๋ณด๊ธฐ
15/31
post-thumbnail

๋„์‹œ ๋ถ„ํ•  ๊ณ„ํš

โ˜‘๏ธ 1. ๋ฌธ์ œ ์„ค๋ช…

N๊ฐœ์˜ ๋งˆ์„๊ณผ ๊ทธ ๋งˆ์„์„ ์—ฐ๊ฒฐํ•˜๋Š” M๊ฐœ์˜ ๊ธธ์ด ์žˆ๋‹ค. ์ด ๋งˆ์„์„ ๋‘ ๊ฐœ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ด€๋ฆฌํ•˜๊ณ  ์‹ถ๋‹ค. ์ตœ์†Œ์˜ ๊ธธ๋งŒ ์กด์žฌํ•˜๊ฒŒ ํ•˜๋ฉด์„œ ๊ธธ์˜ ์œ ์ง€๋น„๊ฐ€ ์ตœ์†Œ๊ฐ€ ๋˜๋„๋ก ํ•˜์—ฌ๋ผ. ๋ถ„๋ฆฌ๋œ ๋‘ ๋งˆ์„ ์‚ฌ์ด์—๋Š” ๊ธธ์ด ์—†๋‹ค.

โ˜‘๏ธ 2. ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ ์ •

์ด ๋ฌธ์ œ๋Š” ๊ฒฐ๊ตญ ๋งˆ์„์˜ ๋ชจ๋“  ์ง‘์„ ์—ฐ๊ฒฐํ•˜๋ฉด์„œ ์ด ์œ ์ง€๋น„๋ฅผ ์ตœ์†Œ๋กœ ๋งŒ๋“œ๋Š” ๋ฌธ์ œ์ด๋ฏ€๋กœ, ์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ๋ฅผ ๋งŒ๋“œ๋Š” ๊ณผ์ •๊ณผ ๊ฐ™๋‹ค. ์ด MST๋ฅผ ๋‘ ๊ฐœ์˜ ๋งˆ์„๋กœ ๋‚˜๋ˆ„๊ธฐ ์œ„ํ•ด์„œ๋Š”, MST๋ฅผ ์ด๋ฃจ๋Š” ๊ฐ„์„  ์ค‘ ๊ฐ€์žฅ ๋น„์‹ผ ๊ฐ„์„  ํ•˜๋‚˜๋ฅผ ์ œ๊ฑฐํ•˜๋ฉด ๋œ๋‹ค.

ํ”„๋ฆผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ MST๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

ํ”„๋ฆผ ์•Œ๊ณ ๋ฆฌ์ฆ˜๋ž€?

ํ”„๋ฆผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ํ•˜๋‚˜์˜ ์ •์ ์—์„œ ์—ฐ๊ฒฐ๋œ ๊ฐ„์„ ๋“ค ์ค‘์—์„œ ํ•˜๋‚˜์”ฉ ์„ ํƒํ•˜๋ฉด์„œ MST๋ฅผ ๋งŒ๋“ค์–ด๊ฐ€๋Š” ๋ฐฉ์‹์ด๋‹ค.

  1. ์ž„์˜ ์ •์ ์„ ์„ ํƒํ•˜์—ฌ ์‹œ์ž‘ํ•˜๊ณ 
  2. ์„ ํƒํ•œ ์ •์ ๊ณผ ์ธ์ ‘ํ•˜๋Š” ์ •์ ๋“ค ์ค‘์— ์ตœ์†Œ ๋น„์šฉ์˜ ๊ฐ„์„ ์„ ๊ฐ€์ง„ ์ •์ ์„ ์„ ํƒํ•œ๋‹ค.
  3. ๋ชจ๋“  ์ •์ ์ด ์„ ํƒ๋  ๋•Œ๊นŒ์ง€ 2์˜ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

โ˜‘๏ธ 3. ํ’€์ด ์ ˆ์ฐจ

๊ทธ๋ž˜ํ”„ ์ •๋ณด ์ž…๋ ฅ๋ฐ›๊ธฐ

  1. ๋งˆ์„์˜ ์ง‘(์ •์ ) ๊ฐœ์ˆ˜ N๊ณผ ๊ธธ(๊ฐ„์„ )์˜ ๊ฐœ์ˆ˜ M์„ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค.

  2. ๊ฐ„์„  ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด Edge ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๊ณ , ๊ฐ„์„ ์˜ ๋„์ฐฉ์ง€ to์™€ ์œ ์ง€๋น„(๊ฐ€์ค‘์น˜) path๋ฅผ ๋‹ด๋Š”๋‹ค.

  3. PriorityQueue๊ฐ€ ๋น„์šฉ์ด ๊ฐ€์žฅ ๋‚ฎ์€ ๊ฐ„์„ ์„ ์ž๋™์œผ๋กœ ์„ ํƒํ•˜๋„๋ก, Edge ํด๋ž˜์Šค์— Comparable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค.

  4. ๊ฐ ์ง‘๊ณผ ์—ฐ๊ฒฐ๋œ ๊ธธ๋“ค์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ์ธ List<Edge>[] home์„ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.

  5. M๊ฐœ์˜ ๊ฐ„์„  ์ •๋ณด๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ home ๋ฆฌ์ŠคํŠธ์— ์–‘๋ฐฉํ–ฅ์œผ๋กœ ์ถ”๊ฐ€ํ•œ๋‹ค.

ํ”„๋ฆผ(Prim) ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ MST๋ฅผ ๊ตฌ์ถ•

ํ”„๋ฆผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์šฐ์„ ์ˆœ์œ„ ํ(PriorityQueue)์™€ ๋ฐฉ๋ฌธ ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•ด ๋น„์šฉ์ด ๊ฐ€์žฅ ๋‚ฎ์€ ๊ฐ„์„ ๋ถ€ํ„ฐ ํ•˜๋‚˜์”ฉ ์ถ”๊ฐ€ํ•˜๋ฉฐ MST๋ฅผ ๋งŒ๋“ค์–ด ๋‚˜๊ฐ€๋Š” ๋ฐฉ์‹์ด๋‹ค.

  1. boolean[] visited ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด ๋ฐฉ๋ฌธํ•œ ์ง‘์„ ์ฒดํฌํ•œ๋‹ค.

  2. PriorityQueue<Edge> pq๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ์ด ํ๋Š” ํ•ญ์ƒ ๋น„์šฉ์ด ๊ฐ€์žฅ ์ ์€ ๊ฐ„์„ ์„ ์šฐ์„ ์œผ๋กœ ๊บผ๋‚ด์ค€๋‹ค.

  3. ์ž„์˜์˜ ์‹œ์ž‘์ (์˜ˆ: 1๋ฒˆ ์ง‘)์„ ์ •ํ•ด visited ๋ฐฐ์—ด์„ true๋กœ ๋ฐ”๊พธ๊ณ , ์ด ์ง‘๊ณผ ์—ฐ๊ฒฐ๋œ ๋ชจ๋“  ๊ฐ„์„ ์„ pq์— ๋„ฃ๋Š”๋‹ค.

  4. ๋ฐ˜๋ณต๋ฌธ: MST๋ฅผ ์™„์„ฑํ•˜๊ธฐ ์œ„ํ•ด N-1๊ฐœ์˜ ๊ฐ„์„ ์„ ์„ ํƒํ•  ๋•Œ๊นŒ์ง€ ๋‹ค์Œ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

    1) pq์—์„œ ๊ฐ€์žฅ ๋น„์šฉ์ด ์ ์€ ๊ฐ„์„  e๋ฅผ ๊บผ๋‚ธ๋‹ค.

    2) e์˜ ๋„์ฐฉ์ง€ e.to๊ฐ€ ์ด๋ฏธ ๋ฐฉ๋ฌธํ•œ ์ง‘์ด๋ผ๋ฉด, ์ด๋ฏธ ๋” ์ €๋ ดํ•œ ๊ฒฝ๋กœ๊ฐ€ ์žˆ๋‹ค๋Š” ๋œป์ด๋ฏ€๋กœ ์ด ๊ฐ„์„ ์„ ๋ฒ„๋ฆฌ๊ณ  ๋‹ค์Œ ๊ฐ„์„ ์„ ๊บผ๋‚ธ๋‹ค.

    3) ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ง‘์ด๋ผ๋ฉด, ์ด ๊ฐ„์„ ์„ ์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ์˜ ์ผ๋ถ€๋กœ ์„ ํƒํ•œ๋‹ค.

    4) e.to๋ฅผ visited ์ฒ˜๋ฆฌํ•˜๊ณ , ์„ ํƒํ•œ ๊ฐ„์„ ์˜ ๋น„์šฉ(e.path)์„ costs ๋ฆฌ์ŠคํŠธ์— ์ €์žฅํ•œ๋‹ค.

    5) ๋งˆ์ง€๋ง‰์œผ๋กœ, ์ƒˆ๋กœ ๋ฐฉ๋ฌธํ•œ e.to์™€ ์—ฐ๊ฒฐ๋œ ๋ชจ๋“  ๊ฐ„์„ ๋“ค์„ pq์— ์ถ”๊ฐ€ํ•˜์—ฌ ๋‹ค์Œ ๋‹จ๊ณ„์—์„œ ํƒ์ƒ‰ํ•  ํ›„๋ณด์— ํฌํ•จ์‹œํ‚จ๋‹ค.

๋งˆ์„์„ ๋‘ ๊ฐœ๋กœ ๋‚˜๋ˆ„๊ธฐ

  1. ์œ„ ๋‹จ๊ณ„์—์„œ costs ๋ฆฌ์ŠคํŠธ์— MST๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” N-1๊ฐœ์˜ ๊ฐ„์„  ๋น„์šฉ์ด ๋ชจ๋‘ ์ €์žฅ๋œ๋‹ค.

  2. ๋งˆ์„์„ ๋‘ ๊ฐœ๋กœ ๋‚˜๋ˆ„๊ธฐ ์œ„ํ•ด, MST๋ฅผ ์ด๋ฃจ๋Š” ๊ฐ„์„ ๋“ค ์ค‘ ๊ฐ€์žฅ ๋น„์šฉ์ด ํฐ ๊ฐ„์„  ํ•˜๋‚˜๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค. ์ด ๊ฐ„์„ ์„ ์ œ๊ฑฐํ•˜๋ฉด ๊ทธ๋ž˜ํ”„๋Š” ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋‘ ๊ฐœ์˜ ์—ฐ๊ฒฐ ์š”์†Œ(๋งˆ์„)๋กœ ๋‚˜๋‰˜๊ฒŒ ๋œ๋‹ค.

  3. Collections.max(costs)๋ฅผ ์‚ฌ์šฉํ•ด costs ๋ฆฌ์ŠคํŠธ์—์„œ ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ์ฐพ๋Š”๋‹ค.

  4. costs ๋ฆฌ์ŠคํŠธ์˜ ๋ชจ๋“  ๋น„์šฉ์„ ๋”ํ•œ ์ดํ•ฉ์—์„œ ๊ฐ€์žฅ ํฐ ๋น„์šฉ์„ ๋นผ๋ฉด, ์ตœ์ข…์ ์œผ๋กœ ๋‘ ๋งˆ์„์„ ์œ ์ง€ํ•˜๋Š” ๋ฐ ๋“œ๋Š” ์ตœ์†Œ ๋น„์šฉ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

โ˜‘๏ธ4. ์ฝ”๋“œ ๊ตฌํ˜„

package study;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.PriorityQueue;
import java.util.StringTokenizer;

public class ๋„์‹œ๋ถ„ํ• ๊ณ„ํš_1647 {

	// ์šฐ์„ ์ˆœ์œ„ ํ๋กœ ๋งŒ๋“ค๊ธฐ
	static class Edge implements Comparable<Edge> { // Comparable ๋„ฃ๋Š” ๊ฑธ ๊นŒ๋จน์—ˆ๋‹ค.
		int to;
		int path;

		public Edge(int to, int path) {
			super();
			this.to = to;
			this.path = path;
		}

		@Override
		public int compareTo(Edge o) {
			return this.path - o.path;
		}
	}

	public static void main(String[] args) throws IOException {
		System.setIn(new FileInputStream("src/input.txt"));

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		StringTokenizer st = new StringTokenizer(br.readLine());
		int N = Integer.parseInt(st.nextToken());
		int M = Integer.parseInt(st.nextToken());

		List<Edge>[] home = new ArrayList[N + 1];
		for (int i = 1; i <= N; i++) {
			home[i] = 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());
			int C = Integer.parseInt(st.nextToken());

			home[A].add(new Edge(B, C));
			home[B].add(new Edge(A, C));
		}

		// ์ตœ์†Œ์‹ ์žฅํŠธ๋ฆฌ ๋งŒ๋“ค๊ธฐ
		PriorityQueue<Edge> pq = new PriorityQueue<>();
		boolean[] visited = new boolean[N + 1];
		visited[1] = true;
        
		int pick = 0; 
		List<Integer> costs = new ArrayList<>();

		for (Edge e : home[1]) { 
			pq.add(e);
		}

		// N -1๊ฐœ ๋ฝ‘์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต
		while (pick < N - 1) {
			Edge e = pq.poll(); // ๋น„์šฉ์ด ๊ฐ€์žฅ ์ ์€ ๊ฐ„์„ ์„ ๊บผ๋‚ธ๋‹ค.
			// ์ด๋ฏธ ๋ฐฉ๋ฌธํ–ˆ์œผ๋ฉด ๋„˜์–ด๊ฐ€
			if (visited[e.to]) {
				continue;
			}
			visited[e.to] = true;
			pick++;
			costs.add(e.path);

			pq.addAll(home[e.to]);'`
		}

		int maxCost = Collections.max(costs);
		int totalCost = 0;

		for (int i = 0; i < costs.size(); i++) {
			totalCost += costs.get(i);
		}
		int ans = totalCost - maxCost;

		System.out.println(ans);

	}
}

1๊ฐœ์˜ ๋Œ“๊ธ€

comment-user-thumbnail
2025๋…„ 9์›” 24์ผ

์ •๋ง ๋นจ๋ฆฌ ํ’€์—ˆ๋„ค ๋ฏผ์Šน์ด๐Ÿ‘

๋‹ต๊ธ€ ๋‹ฌ๊ธฐ