๐ก ์ ๊ทผ๋ฒ
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);
'๐ง ์๊ณ ๋ฆฌ์ฆ > ์ ํ๋ณ ๋ํ๋ฌธ์ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ค์ต์คํธ๋ผ][๋ฐฑ์ค] 117799 ์ต์๋น์ฉ ๊ตฌํ๊ธฐ2 JS (2) | 2024.01.10 |
---|---|
[์์์ ๋ ฌ][๋ฐฑ์ค] 2252 JS ํ์ด (1) | 2023.12.28 |
MST ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ ์ค๋ช (0) | 2023.12.28 |
[BFS][๋ฐฑ์ค] 7576 ํ ๋งํ js ํ์ด (1) | 2023.12.27 |