
- μ§μ μ°¨μκ° 0μΈ λ Έλλ₯Ό νμ λ£λλ€.
- νκ° λΉ λκΉμ§ λ€μμ κ³Όμ μ λ°λ³΅νλ€.
- νμμ μμλ₯Ό κΊΌλ΄ ν΄λΉ λ Έλμμ μΆλ°νλ κ°μ μ κ·Έλνμμ μ κ±°νλ€.
- μλ‘κ² μ§μ μ°¨μκ° 0μ΄ λ λ Έλλ₯Ό νμ λ£λλ€.
μ κ³Όμ μ μννμ λ κ° λ Έλκ° νμλ€μ΄μ¨ μμκ° μμμ λ ¬μ μνν κ²°κ³Όκ° λλ€.
μ§μ μ°¨μλ ?
νΉμ ν λ Έλλ‘ λ€μ΄μ€λ κ°μ μ κ°μ
μ κ³Όμ μ κ·Έλ¦ΌμΌλ‘ μ΄ν΄λ³΄μ!

μ§μ
μ°¨μ κ° 0μΈ λ
ΈλμΈ 1λ² λ
Έλλ₯Ό νμ λ£λλ€.

νμμ 1λ² λ
Έλλ₯Ό κΊΌλΈ λ€, 1λ² λ
Έλμμ μΆλ°ν΄ 2λ² λ
Έλ, 5λ² λ
Έλλ‘ κ°λ κ°μ λκ°λ₯Ό μ κ±°νλ€.
λ€μ μ§μ
μ°¨μκ° 0μ΄ λ 2λ² λ
Έλμ 5λ² λ
Έλλ₯Ό νμ λ£λλ€. μ΄ λ νμ λ£λ μμλ μκ΄ μλ€. μ΄λ€ λ
Έλλ₯Ό λ¨Όμ μνν΄λ λ
Έλλ₯Ό μμλλ‘ λ°©λ¬Ένλ κ²μ μλ°λμ§ μκΈ° λλ¬Έμ΄λ€.

νμμ 2λ² λ
Έλλ₯Ό κΊΌλΈ λ€, 2λ² λ
Έλμμ μΆλ°ν΄ 3λ² λ
Έλ, 6λ² λ
Έλλ‘ κ°λ κ°μ λκ°λ₯Ό μ κ±°νλ€.
λ€μ μ§μ
μ°¨μκ° 0μ΄ λ 3λ² λ
Έλλ₯Ό νμ λ£λλ€.

νμμ 5λ² λ
Έλλ₯Ό κΊΌλΈ λ€, 5λ² λ
Έλμμ μΆλ°ν΄ 6λ² λ
Έλλ‘ κ°λ κ°μ μ μ κ±°νλ€.
λ€μ μ§μ μ°¨μκ° 0μ΄ λ 6λ² λ Έλλ₯Ό νμ λ£λλ€.

νμμ 3λ² λ
Έλλ₯Ό κΊΌλΈ λ€, 3λ² λ
Έλμμ μΆλ°ν΄ 4λ² λ
Έλλ‘ κ°λ κ°μ μ μ κ±°νλ€.
μ§μ μ°¨μκ° 0μ΄ λ λ Έλκ° μμΌλ―λ‘ λ€μ λ¨κ³λ‘ λμ΄κ°λ€.

νμμ 6λ² λ
Έλλ₯Ό κΊΌλΈ λ€, 6λ² λ
Έλμμ μΆλ°ν΄ 4λ² λ
Έλλ‘ κ°λ κ°μ μ μ κ±°νλ€.
λ€μ μ§μ
μ°¨μκ° 0μ΄ λ 4λ² λ
Έλλ₯Ό νμ λ£λλ€.

νμμ 4λ² λ
Έλλ₯Ό κΊΌλΈ λ€, 4λ² λ
Έλμμ μΆλ°ν΄ 7λ² λ
Έλλ‘ κ°λ κ°μ μ μ κ±°νλ€.
λ€μ μ§μ
μ°¨μκ° 0μ΄ λ 7λ² λ
Έλλ₯Ό νμ λ£λλ€.
νμμ 7λ² λ
Έλλ₯Ό κΊΌλΈλ€. 7λ² λ
Έλμμ λκ°λ κ°μ μ΄ μκ³ , μ§μ
μ°¨μκ° 0μ΄λ λ
Έλκ° μμΌλ―λ‘ μνλ₯Ό μ’
λ£νλ€.
κ° λ Έλκ° νμ λ€μ΄μ¨ μμ, μ¦ μμμ λ ¬μ μνν κ²°κ³Όλ λ€μκ³Ό κ°λ€.
1 β 2 β 5 β 3 β 6 β 4 β 7
λ§μ½ μ€ν
2μμ 5λ² λ
Έλλ₯Ό λ¨Όμ λ£μ΄μ€¬λ€λ©΄ μμμ λ ¬μ μνν κ²°κ³Όλ λ€μκ³Ό κ°μ κ²μ΄λ€.
1 β 5 β 2 β 3 β 6 β 4 β 7
μ΄μ²λΌ ν λ¨κ³μμ νμ μλ‘κ² λ€μ΄κ°λ μμκ° 2κ° μ΄μμΈ κ²½μ° μμμ λ ¬μ μνν κ²°κ³Όλ μ¬λ¬κ°κ° λλ€.
λν λͺ¨λ μμλ₯Ό λ°©λ¬ΈνκΈ° μ μ νκ° λΉλ€λ©΄ μ¬μ΄ν΄μ΄ μ‘΄μ¬νλ€κ³ νλ¨ν μ μλ€. μ¬μ΄ν΄μ΄ μλ κ²½μ° μ¬μ΄ν΄ λ΄μ λ Έλλ€μ μμλ₯Ό μ ν μ μκΈ°μ μ΄λ€ λ Έλλ νλ λ€μ΄κ° μκ° μκΈ° λλ¬Έμ΄λ€.
// μ
λ ₯ κ° μ²« μμλ λ
Έλμ κ°μμ κ°μ μ κ°μ
// μ΄ν nκ°μ μμλ κ°μ μ μ 보(μμ λ
Έλ λ λ
Έλ)
const inputs = ['7 8', '1 2', '1 5', '2 3', '2 6', '3 4', '4 7', '5 6', '6 4'];
const [n, e] = inputs.shift().split(' ').map(Number);
// κ·Έλν κ°μ μ 보λ₯Ό μ μ₯ν λ°°μ΄
const graph = Array.from({ length: n + 1 }, () => []);
// κ° λ
Έλλ³ μ§μ
μ°¨μλ₯Ό κ³μ°ν λ°°μ΄
const indegree = Array(n + 1).fill(0);
const q = [];
// κ°μ μ 보λ₯Ό μννλ©° μμ λ
Έλμ λ λ
Έλλ₯Ό κ·Έλνμ λ£κ³ , μ§μ
μ°¨μλ₯Ό κ³μ°νλ€.
for (const input of inputs) {
const [s, e] = input.split(' ').map(Number);
graph[s].push(e);
indegree[e] += 1;
}
// λͺ¨λ κ°μ μ 보μ μ§μ
μ°¨μλ₯Ό μ
λ ₯λ°μ λ€ μ§μ
μ°¨μκ° 0μΈ λ
Έλλ₯Ό μ°Ύμ νμ λ£μ΄μ€λ€.
for (let i = 1; i <= n; i++) {
if (indegree[i] === 0) q.push(i);
}
// νκ° λΉλκΉμ§ μν
while (q.length) {
const current = q.shift();
// νμ λ°©λ¬Έν μμκ° μμμ λ ¬μ μνν μμ
// μ¦ μΆλ ₯λλ λ
Έλ μμκ° μμμ λ ¬μ μνν κ²°κ³Ό
console.log(current);
// νμ¬ λ
Έλμ μ°κ²°λ κ°μ μ μ κ±°ν¨
for (const next of graph[current]) {
indegree[next] -= 1;
// μλ‘κ²μ§μ
μ°¨μκ° 0μΈ λ
Έλλ₯Ό νμ μ½μ
if (indegree[next] === 0) q.push(next);
}
}
μμ μ λ Ήμ μκ°λ³΅μ‘λλ O(V + E)μ΄λ€. λͺ¨λ λ
Έλλ₯Ό νμΈνκ³ , λͺ¨λ κ°μ μ νμΈνκΈ° λλ¬Έμ΄λ€.