<λ¬Έμ λ§ν¬>
https://school.programmers.co.kr/learn/courses/30/lessons/49191
<νμ΄ μ λ΅>
1. μΈλ» 보면 μμμ λ ¬ κ°μ 보μ΄λλ° μμκ° νμ λ μ μλ€μ μμλ§ λ°νν΄μΌνλ―λ‘ μμμ λ ¬λ‘λ ν μ μλ€.
2. νλ‘μ΄λ-μμ¬λ‘ νΌ μ¬λλ€λ λ§μλλ° κ·Έλ₯ dfsλ‘ νΈλ κ² λ κ°λ¨νλ€
3. μμκ° νμ λμ΄μλ€λ κ²μ μμ μ μ(μμ κΈ°μ€ μΉμ)μ μλ (μμ κΈ°μ€ ν¨μ)λ₯Ό λͺ¨λ μ λ€λ κ²μ΄λ―λ‘, μΉμμ ν¨μ κ·Έλν 2κ°λ₯Ό λ§λ€μ΄μ κ°κ°μ λν΄ dfsλ₯Ό μ μ©ν΄μ νμ λ μΉμμ ν¨μμ ν©μ΄ μμ μ μ μΈν μ 체 μΈμ μμ κ°μΌλ©΄ μμκ° νμ λμλ€κ³ λ³Ό μ μλ€.
<μ λ΅ μ½λ>
# dfs ν¨μ μ μΈ
def dfs(node, graph, visited):
visited[node] = 1
for next in graph[node]:
if visited[next]:
continue
visited[next] = 1
dfs(next, graph, visited)
# λ°©λ¬Έν λ
Έλ (μΉμ or ν¨μ) μ λ°ν
return sum(visited) - 1
def solution(n, results):
answer = 0
# μΉμ, ν¨μ κ·Έλν
win_graph = [[] for _ in range(n + 1)]
lose_graph = [[] for _ in range(n + 1)]
for result in results:
win, lose = result
win_graph[win].append(lose)
lose_graph[lose].append(win)
# κ° λ
Έλμ λν΄μ dfsλ‘ νμ
λ μΉμμ ν¨μ μ ꡬνκΈ°
for i in range(1, n + 1):
# μμ λ°μΌλ‘ ν¨μμ μ
visited = [0 for _ in range(n + 1)]
win_cnt = dfs(i, win_graph, visited)
# μμ μλ‘ μΉμμ μ
visited = [0 for _ in range(n + 1)]
lose_cnt = dfs(i, lose_graph, visited)
# μμκ° νμ λ κ²½μ°
if win_cnt + lose_cnt == n - 1:
answer += 1
return answer
'β Problem_Solving > νλ‘κ·Έλλ¨Έμ€' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[νλ‘κ·Έλλ¨Έμ€] νΌμ¦ μ‘°κ° μ±μ°κΈ° (Python/νμ΄μ¬) (0) | 2023.02.11 |
---|---|
[νλ‘κ·Έλλ¨Έμ€] μ¬νκ²½λ‘ (Python/νμ΄μ¬) (0) | 2023.02.10 |
[νλ‘κ·Έλλ¨Έμ€] λλμ§ (Python/νμ΄μ¬) (0) | 2023.02.08 |
[νλ‘κ·Έλλ¨Έμ€] κ³ λμ kit - μμ νμ (Python/νμ΄μ¬) (0) | 2023.02.07 |
[νλ‘κ·Έλλ¨Έμ€] κ³ λμ kit - μ λ ¬ (Python/νμ΄μ¬) (0) | 2023.02.05 |
λκΈ