๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿง  ์•Œ๊ณ ๋ฆฌ์ฆ˜/์œ ํ˜•๋ณ„ ๋Œ€ํ‘œ๋ฌธ์ œ

[MST][๋ฐฑ์ค€] 1197 ์ตœ์†Œ ์ŠคํŒจ๋‹ ํŠธ๋ฆฌ JS ํ’€์ด

by megan07 2023. 12. 28.

๐Ÿ’ก ์ ‘๊ทผ๋ฒ•

1. ๋ชจ๋“  ๊ฐ„์„ ๋“ค์„ ๋น„์šฉ์ˆœ์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ

2. ๋น„์šฉ์ด ์ž‘์€ ๊ฐ„์„ ๋ถ€ํ„ฐ ์„ ํƒํ•ด์„œ ๋…ธ๋“œ๋“ค์„ ๊ฐ™์€ ๊ทธ๋ž˜ํ”„๋กœ ํ•ฉ์ณ์คŒ.
    ๋งŒ์•ฝ ๋‘ ๋…ธ๋“œ๊ฐ€ ๊ฐ™์€ ๊ทธ๋ž˜ํ”„์— ํฌํ•จ๋˜์–ด ์žˆ๋‹ค๋ฉด ๋„˜์–ด๊ฐ.

3. ํŠธ๋ฆฌ์˜ ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ •์ ์˜ ๊ฐœ์ˆ˜-1์ด๋ฉด ๋ฐ˜๋ณต๋ฌธ break

 

 

const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';

// ์ž…๋ ฅ๊ฐ’์ด ์ฒซ ๋ฒˆ์งธ ์ค„์—๋Š” ์ž…๋ ฅ ๊ฐ’์˜ ๊ธธ์ด(n), n๊ฐœ์˜ ์ค„์— ๊ฑธ์ณ์„œ ํ•œ ์ค„์— ํ•˜๋‚˜์˜ ์ž…๋ ฅ๊ฐ’์ด ์ฃผ์–ด์งˆ ๋•Œ
const [n, ...input] = require('fs')
  .readFileSync(filePath)
  .toString()
  .trim()
  .split('\n');

function solution(V, E, List) {
  const parent = Array.from(new Array(V + 1), (_, idx) => idx);

  //๊ฐ„์„ ์˜ ํฌ๊ธฐ์ˆœ์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ
  List.sort((a, b) => a[2] - b[2]);
  
  let result = 0;
  
  //MST์˜ ๊ฐ„์„  ๊ฐœ์ˆ˜๋Š” ์ •์ -1๊ฐœ
  let edges = V - 1;

  //ํŠธ๋ฆฌ ๋ฃจํŠธ ๋…ธํŠธ ์ฐพ๊ธฐ
  function getParent(v) {
    if (parent[v] === v) return v;
    return (parent[v] = getParent(parent[v]));
  }

  //๋ฃจํŠธ ๋…ธ๋“œ ํ•ฉ์น˜๊ธฐ
  function unionParent(v1, v2) {
    v1 = getParent(v1);
    v2 = getParent(v2);
    if (v1 < v2) parent[v2] = v1;
    else parent[v1] = v2;
  }

  
  //๋ฃจํŠธ ๋…ธ๋“œ ์ฐพ๊ธฐ
  function findParent(v1, v2) {
    const p1 = getParent(v1);
    const p2 = getParent(v2);
    return p1 === p2;
  }

  for (let i = 0; i < E; i++) {
    const [v1, v2, c] = List[i];
    
    //๋‘ ์ •์ ์ด ๋‹ค๋ฅธ ๊ทธ๋ž˜ํ”„์— ์†ํ•ด ์žˆ์œผ๋ฉด 
    //๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ํ•ฉ์ณ์คŒ
    if (!findParent(v1, v2)) {
      result += c;
      edges--;
      unionParent(v1, v2);
      if (!edges) break;
    }
  }

  return result;
}

const arr = n.split(' ').map(Number);
const answer = solution(
  arr[0],
  arr[1],
  input.map((r) => r.split(' ').map(Number)),
);

console.log(answer);