공부/백준

2606 백준 파이썬

김빼로 2023. 1. 3. 17:52

이것이 코딩 취업을 위한 코딩 테스트다를 참고하여 풀었다.

 

이코테 예제에서의 'graph'는 하나의 노드와 연결된 모든 노드들을 말하는 반면 2606문제의 입력은 하나의 노드와 그와 연결된 하나의 노드를 말해주기 때문에 이코테의 bfs 소스코드를 이용하려면 '하나의 노드와 그와 연결된 하나의 노드'를 '하나의 노드와 연결된 모든 노드들'로 바꿔줘야 했다.

 

그래서 본 코드에선 함수 'graph_convert'를 이용하여 이코테 소스코드를 사용할 수 있도록 만들었다.

 

from collections import deque

n = int(input())
r = int(input())
graph = []
for _ in range(r):
    graph.append(list(map(int, input().split())))

def graph_convert(n, r, graph):
    convert_graph = [[] for _ in range(n+1)]
    for gph in graph:
        first = gph[0]
        second = gph[1]
        convert_graph[first].append(second)
        convert_graph[second].append(first)
        #print('message = ', convert_graph)

    return convert_graph


new_graph =  graph_convert(n, r, graph)

def bfs(graph, start, visited):
  ans = 0
  queue =deque([start])
  visited[start] = True
  while queue:
    v = queue.popleft()
    for i in new_graph[v]:
      if not visited[i]:
        queue.append(i)
        visited[i] = True
        ans+=1

  return ans

visited = [False] * (n+1)
ans = bfs(new_graph, 1, visited)
print(ans)