[κ·Έλν-λλκ³Ό λ§λ κ·Έλν]
νλ‘κ·Έλλ¨Έμ€
SWκ°λ°μλ₯Ό μν νκ°, κ΅μ‘μ Total Solutionμ μ 곡νλ κ°λ°μ μ±μ₯μ μν λ² μ΄μ€μΊ ν
programmers.co.kr
λ¬Έμ
λλ λͺ¨μ κ·Έλν, λ§λ λͺ¨μ κ·Έλν, 8μ λͺ¨μ κ·Έλνλ€μ΄ μ‘΄μ¬νλ€. μ΄ κ·Έλνλ€κ³Ό 무κ΄ν μ μ μ νλ μμ±ν ν, κ° λλ λͺ¨μ κ·Έλν, λ§λ λͺ¨μ κ·Έλν, 8μ λͺ¨μ κ·Έλνμ μμμ μ μ νλλ‘ ν₯νλ κ°μ μ μ°κ²°νκ³ κ° μ μ μ μλ‘ λ€λ₯Έ λ²νΈλ₯Ό λ§€κ²Όλ€.
μ΄λ κ·Έλνμ κ°μ μ λ³΄κ° μ£Όμ΄μ‘μ λ, μμ±ν μ μ μ λ²νΈμ μ μ μ μμ±νκΈ° μ λλ λͺ¨μ κ·Έλνμ μ, λ§λ λͺ¨μ κ·Έλνμ μ, 8μ λͺ¨μ κ·Έλνμ μλ₯Ό ꡬνλΌ.
[λλ λͺ¨μ κ·Έλν]: nκ°μ μ μ κ³Ό nκ°μ κ°μ μΌλ‘ μ΄λ£¨μ΄μ Έ μμ. ν μ μ μμ μΆλ°ν΄ μ΄μ©ν μ μλ κ°μ μ κ³μ λ°λΌκ°λ©΄ λλ¨Έμ§ n-1κ°μ μ μ λ€μ ν λ²μ© λ°©λ¬Έν λ€ μλ μΆλ°νλ μ μ μΌλ‘ λ€μ λμμ€κ² λ¨.

[λ§λ λͺ¨μ κ·Έλν]: nκ°μ μ μ κ³Ό n-1κ°μ κ°μ μΌλ‘ μ΄λ£¨μ΄μ Έ μμ. ν μ μ μμ μΆλ°ν΄ κ°μ μ κ³μ λ°λΌκ°λ©΄ λλ¨Έμ§ n-1κ°μ μ μ μ ν λ²μ© λ°©λ¬Ένκ² λλ μ μ μ΄ λ¨ νλ μ‘΄μ¬ν¨

[8μ λͺ¨μ κ·Έλν]: 2n+1κ°μ μ μ κ³Ό 2n+2κ°μ κ°μ μΌλ‘ μ΄λ£¨μ΄μ Έ μμ. λμΌν 2κ°μ λλ λͺ¨μ κ·Έλνμμ μ μ μ νλμ© κ³¨λΌ κ²°ν©μν¨ ννμ κ·Έλν ννμ

μ ν μ¬ν
- 1 ≤ edgesμ κΈΈμ΄ ≤ 1,000,000
- edgesμ μμλ [a,b] ννμ΄λ©°, aλ² μ μ μμ bλ² μ μ μΌλ‘ ν₯νλ κ°μ μ΄ μλ€λ κ²μ λνλ λλ€.
- 1 ≤ a, b ≤ 1,000,000
- λ¬Έμ μ 쑰건μ λ§λ κ·Έλνκ° μ£Όμ΄μ§λλ€.
- λλ λͺ¨μ κ·Έλν, λ§λ λͺ¨μ κ·Έλν, 8μ λͺ¨μ κ·Έλνμ μμ ν©μ 2μ΄μμ λλ€.
μ μΆλ ₯ μ
| edges | result |
| [[2, 3], [4, 3], [1, 1], [2, 1]] | [2, 1, 1, 0] |
| [[4, 11], [1, 12], [8, 3], [12, 7], [4, 2], [7, 11], [4, 8], [9, 6], [10, 11], [6, 10], [3, 5], [11, 1], [5, 3], [11, 9], [3, 8]] | [4, 0, 1, 2] |
μ κ·Ό λ°©λ²
κ·Έλν νμ΄ λ°©λ² μ€ νλμΈ DFSλ BFSλ‘ μ κ·Όνλ €κ³ νμ§λ§,, λμ ν λ‘μ§μ΄ μκ°λμ§ μμμ λ€λ₯Έ λΆλ€μ νμ΄λ₯Ό μ°Έκ³ νλ€.
μΈ κ·Έλνλ€μ νΉμ§μ ν΅ν΄ [λ€μ΄μ€λ κ°μ μ κ°μ, λκ°λ κ°μ μ κ°μ]λ‘ μ κ·Όνλ©΄ λλ€λ κ²μ μκ² λμλ€.
λ¨Όμ , μμ± μ μ μ κ²½μ° 'κ·Έλνλ€κ³Ό 무κ΄ν μ μ 'μ΄λΌλ μ μμ λ€μ΄μ€λ κ°μ μ μ‘΄μ¬νμ§ μκ³ , λκ°λ κ°μ λ§ μ‘΄μ¬νλ€. λκ°λ κ°μ μ 2κ° μ΄μμ΄μ΄μΌ μμ± μ μ μ΄λ€! → μ ν μ¬νμ κ·Έλνμ ν©μ 2μ΄μμ΄λΌκ³ λμ΄ μμ
λν, λκ°λ κ°μ μ κ°μ = μμ± μ μ μΌλ‘ μ°κ²°νκΈ° μ κ·Έλνμ μ΄ κ°μμ΄λ€.
λ§λ λͺ¨μ κ·Έλνμ κ²½μ° λ€λ₯Έ λ κ·Έλν(λλ λͺ¨μ, 8μ λͺ¨μ)μ ννμ λ€λ₯΄κ² λ§μ§λ§ μ μ μ λ€μ΄μ€λ κ°μ λ§ μ‘΄μ¬νκ³ , λκ°λ κ°μ μ μ‘΄μ¬νμ§ μλλ€.
8μ λͺ¨μ κ·Έλνμ κ²½μ° λ€λ₯Έ λ κ·Έλν(λ§λ λͺ¨μ, λλ λͺ¨μ)μ ννμ λ€λ₯΄κ² μ€κ°μ μλ μ μ μ λ€μ΄μ€λ κ°μ μ΄ 2κ°, λκ°λ κ°μ λ 2κ° μ‘΄μ¬νλ€.
λ§μ§λ§μΌλ‘, λλ λͺ¨μ κ·Έλνλ κ·Έλνμ μ΄ κ°μ - λ§λ λͺ¨μ κ·Έλν κ°μ - 8μ λͺ¨μ κ·Έλν κ°μμ κ°μ΄λ€.
λ°λΌμ, μ 리νλ©΄ μλμ κ°μ νΉμ§μ μ΄μ©ν΄ λ¬Έμ λ₯Ό ν΄κ²°ν μ μλ€.
| λ€μ΄μ€λ κ°μ μ κ°μ | λκ°λ κ°μ μ κ°μ | |
| μμ± μ μ | 0 | 2κ° μ΄μ |
| λ§λ λͺ¨μ κ·Έλν | 1 | 0 |
| 8μ λͺ¨μ κ·Έλν | 2 | 2 |
| λλ λͺ¨μ κ·Έλν | μμ± μ μ λκ°λ κ°μ κ°μ - λ§λ λͺ¨μ κ·Έλν κ°μ - 8μ λͺ¨μ κ·Έλν κ°μ | |
μ½λ
function solution(edges) {
// λ€μ΄μ€λ κ°μ μ κ°μμ λκ°λ κ°μ μ κ°μ μΉ΄μ΄ν
const edgesInfo = new Map();
for(const [a, b] of edges) {
// λκ°λ κ°μ μ κ°μ μ¦κ°
if(edgesInfo.has(a)) {
const [inCnt, outCnt] = edgesInfo.get(a);
edgesInfo.set(a, [inCnt, outCnt+1]);
}else edgesInfo.set(a, [0, 1]);
// λ€μ΄μ€λ κ°μ μ κ°μ μ¦κ°
if(edgesInfo.has(b)) {
const [inCnt, outCnt] = edgesInfo.get(b);
edgesInfo.set(b, [inCnt+1, outCnt]);
}else edgesInfo.set(b, [1, 0]);
}
const answer = [0, 0, 0, 0];
const nodes = [...edgesInfo];
for(const node of nodes) {
const [inCnt, outCnt] = node[1];
// μμ± μ μ μ°ΎκΈ°
if(inCnt === 0 && outCnt >= 2) {
answer[0] = node[0];
} else if(outCnt === 0) { // λ§λ κ·Έλν μ°ΎκΈ°(λκ°λ κ°μ μ΄ 0κ°)
answer[2] += 1;
} else if(inCnt >= 2 && outCnt >= 2) { // 8μ κ·Έλν μ°ΎκΈ°(λ€μ΄μ€λ κ°μ , λκ°λ κ°μ λͺ¨λ 2κ° μ΄μ)
answer[3] += 1;
}
}
answer[1] = edgesInfo.get(answer[0])[1] - answer[2] - answer[3]; // λλ κ·Έλν μ°ΎκΈ°
return answer;
}'μκ³ λ¦¬μ¦ > μ½λ©ν μ€νΈ λ¬Έμ νμ΄' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
| [νλ‘κ·Έλλ¨Έμ€-49191] μμ (0) | 2026.05.17 |
|---|---|
| [νλ‘κ·Έλλ¨Έμ€-1843] μ¬μΉμ°μ° (0) | 2026.05.02 |
| [νλ‘κ·Έλλ¨Έμ€-42895] NμΌλ‘ νν (0) | 2026.04.30 |
| [νλ‘κ·Έλλ¨Έμ€-42860] μ‘°μ΄μ€ν± (0) | 2026.04.27 |
| [λ°±μ€-35289] κ΄νΈ λ¬Έμμ΄ μΉ΄λ (0) | 2026.04.14 |