PS/백준

[Python] 15900번 나무 탈출

s_omi 2024. 8. 31. 10:46

✏️ 문제

 

문제 파악

인접리스트를 사용하여 트리를 구성하면 되는 DFS 문제이다.

 

각각의 리프 노드에서 루트까지의 모든 이동 횟수를 계산하여 총 이동 횟수가 홀수면 성원이가 승리하고 짝수면 형석이가 승리한다. 이때 리프 노드에서 루트까지의 이동 횟수는 노드의 깊이와 같으므로 이를 저장할 depth 배열이 따로 필요하다. 

 

알고리즘

  • 그래프 이론
  • 그래프 탐색
  • 깊이 우선 탐색
  • 트리

 

 

코드

import sys
input = sys.stdin.readline
sys.setrecursionlimit(10**5)

n = int(input())
graph = [[] for _ in range(n+1)]
visited = [0] * (n+1)
depth = [0] * (n+1)
ans = 0

for _ in range(n-1):
  u, v = map(int, input().split())
  graph[u].append(v)
  graph[v].append(u)

def dfs(v):
  visited[v] = 1

  for neighbor in graph[v]:
    if visited[neighbor] == 0:
      depth[neighbor] = depth[v] + 1
      dfs(neighbor)
  
dfs(1)

for i in range(2, n+1):
  if len(graph[i]) == 1: 
    ans += depth[i]

print("No" if (ans % 2 == 0) else "Yes")

 

 

 


 

⭐️ DFS와 BFS에 대해서 아직 잘 모른다면?

 

[알고리즘] DFS와 BFS

DFS (깊이 우선 탐색) 와 BFS (너비 우선 탐색) ?그래프 탐색 알고리즘의 대표적인 예로 이 알고리즘들은 그래프, 트리, 네트워크 등의 자료구조를 탐색하는 데 사용한다. 그래프는 노드(정점)와 노

mi-dairy.tistory.com

 

 

 

'PS > 백준' 카테고리의 다른 글

[Python] 2210번 숫자판 점프  (0) 2024.09.02
[Python] 1189번 컴백홈  (4) 2024.09.02
[Python] 24479번 알고리즘 수업 - 깊이 우선 탐색 1  (0) 2024.08.31
[Python] 1326번 폴짝폴짝  (0) 2024.08.30
[Python] 15723번 n단 논법  (0) 2024.08.30