[dfs] 백준 #3182 한동이는 공부가 하기 싫어!

zio·2022년 2월 8일
0

Algorithm

목록 보기
6/11

문제

https://www.acmicpc.net/problem/3182

풀이

#한동이는 공부가 하기 싫어!
n = int(input())
graph = [0]
result = [0]

for i in range(1, n+1):
  graph.append(int(input()))

def dfs(start):
  visited[start] = True
  if not visited[graph[start]]:
    dfs(graph[start])

for i in range(1, n+1):
  visited = [False] * (n+1)
  dfs(i)
  result.append(visited.count(True))

print(result.index(max(result)))

접근

어차피 한 선배당 한 명 밖에 지목을 못하기 때문에 1차원 리스트로 그래프를 만들고, dfs를 사용해서 시작점부터 어디까지 갈 수 있는지 체크를 한다음 방문한 노드의 개수를 result에 계속 append() 한다.
모든 각각의 노드에서 출발해서 갈 수 있는 노드의 개수를 result에 다 저장한 후에 result의 max값의 index를 출력한다. max값이 같은 것이 여러개인 경우 제일 작은 값을 출력하면 되기 때문에 index(max())를 사용하면 된다.

profile
🐣

0개의 댓글