Algorithm
2023. 6. 13.
[νλ‘κ·Έλλ¨Έμ€] μ λ ₯λ§μ λλ‘ λλκΈ°
Question
λ¬Έμ μ€λͺ
nκ°μ μ‘μ νμ΄ μ μ μ ν΅ν΄ νλμ νΈλ¦¬ ννλ‘ μ°κ²°λμ΄ μμ΅λλ€. λΉμ μ μ΄ μ μ λ€ μ€ νλλ₯Ό λμ΄μ νμ¬μ μ λ ₯λ§ λ€νΈμν¬λ₯Ό 2κ°λ‘ λΆν νλ €κ³ ν©λλ€. μ΄λ, λ μ λ ₯λ§μ΄ κ°κ² λλ μ‘μ νμ κ°μλ₯Ό μ΅λν λΉμ·νκ² λ§μΆκ³ μ ν©λλ€.
μ‘μ νμ κ°μ n, κ·Έλ¦¬κ³ μ μ μ 보 wiresκ° λ§€κ°λ³μλ‘ μ£Όμ΄μ§λλ€. μ μ λ€ μ€ νλλ₯Ό λμ΄μ μ‘μ ν κ°μκ° κ°λ₯ν λΉμ·νλλ‘ λ μ λ ₯λ§μΌλ‘ λλμμ λ, λ μ λ ₯λ§μ΄ κ°μ§κ³ μλ μ‘μ ν κ°μμ μ°¨μ΄(μ λκ°)λ₯Ό return νλλ‘ solution ν¨μλ₯Ό μμ±ν΄μ£ΌμΈμ.
μ νμ¬ν
- nμ 2 μ΄μ 100 μ΄νμΈ μμ°μμ λλ€.
- wiresλ κΈΈμ΄κ°
n-1
μΈ μ μν 2μ°¨μ λ°°μ΄μ λλ€.- wiresμ κ° μμλ [v1, v2] 2κ°μ μμ°μλ‘ μ΄λ£¨μ΄μ Έ μμΌλ©°, μ΄λ μ λ ₯λ§μ v1λ² μ‘μ νκ³Ό v2λ² μ‘μ νμ΄ μ μ μΌλ‘ μ°κ²°λμ΄ μλ€λ κ²μ μλ―Έν©λλ€.
- 1 ≤ v1 < v2 ≤ n μ λλ€.
- μ λ ₯λ§ λ€νΈμν¬κ° νλμ νΈλ¦¬ ννκ° μλ κ²½μ°λ μ λ ₯μΌλ‘ μ£Όμ΄μ§μ§ μμ΅λλ€.
μ μΆλ ₯ μ
n | wires | result |
---|---|---|
9 | [[1,3],[2,3],[3,4],[4,5],[4,6],[4,7],[7,8],[7,9]] | 3 |
4 | [[1,2],[2,3],[3,4]] | 0 |
7 | [[1,2],[2,7],[3,7],[3,4],[4,5],[6,7]] | 1 |
Solve
νμ΄ κ³Όμ
- wiresμ λ Έλλ€μ νλμ© μ μΈν λ Έλλ€λ‘ νΈλ¦¬λ₯Ό μμ±ν©λλ€.
- DFS νΉμ BFSλ₯Ό μ΄μ©νμ¬ νΈλ¦¬λ₯Ό μννλ©° λμ΄μ§ νΈλ¦¬μ λ Έλ κ°μμ λ°λ νΈλ¦¬μ λ Έκ·Έ κ°μλ₯Ό ꡬν΄μ€λλ€.
- λ νΈλ¦¬μ λ Έλ κ°μμ μ°¨μ΄κ° κ°μ₯ μμ κ°μ μ λ΅μΌλ‘ 리ν΄ν©λλ€.
νμ΄ μ½λ
const solution = (n, wires) => {
let answer = n;
for (let i = 0; i < wires.length; i++) {
const tree = makeTree(n, wires, i);
const startNode = tree.findIndex((v) => !!v.length);
const nodeCount = countNode(tree, startNode);
// ꡬν νΈλ¦¬ λ
Έλ κ°μμ μ΄ λ
Έλ κ°μλ₯Ό μ΄μ©νμ¬ λ°λ νΈλ¦¬ λ
Έλ κ°μλ ꡬν΄μ€λ€.
const abs = Math.abs(nodeCount * 2 - n);
if (abs < answer) answer = abs;
}
return answer;
};
// νΈλ¦¬ μμ± λ‘μ§
const makeTree = (n, wires, exceptIdx) => {
const tree = Array.from({ length: n + 1 }, () => []);
wires.forEach((wire, idx) => {
if (idx === exceptIdx) return;
const [a, b] = wire;
tree[a].push(b);
tree[b].push(a);
});
return tree;
};
// νΈλ¦¬μ λ
Έλ κ°μλ₯Ό ꡬνλ λ‘μ§
const countNode = (tree, startNode) => {
const visited = [];
let needVisit = [startNode];
while (!!needVisit.length) {
const node = needVisit.shift();
if (!visited.includes(node)) {
visited.push(node);
needVisit = [...tree[node], ...needVisit];
}
}
// λ°©λ¬Ένλ λ
Έλλ€μ κ°μ = νΈλ¦¬μ λ
Έλ κ°μ
return visited.length;
};
'Algorithm' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[νλ‘κ·Έλλ¨Έμ€] μμ μ°ΎκΈ° (Javascript) (0) | 2023.06.15 |
---|---|
[νλ‘κ·Έλλ¨Έμ€] ν° μ λ§λ€κΈ° (0) | 2023.06.14 |
[μ΄λ‘ ] BFSμ DFS (javascript) (0) | 2023.06.13 |
λ‘€μΌμ΄ν¬ μλ₯΄κΈ° (0) | 2023.05.19 |
λ€μ μλ ν° μ μ°ΎκΈ° (0) | 2023.05.17 |