def solution(n, edge):
answer = 0
edges = {i: [] for i in range(n+1)}
for x,y in edge:
edges[x].append(y)
edges[y].append(x)
cur = {1}
visited = {1}
while True:
new = set()
for c in cur:
new.update({i for i in edges[c] if i not in visited})
if not new:
break
cur = new
visited.update(cur)
return len(cur)
cur
: 현재 방문할 node 들이 들어있다.
한번 while 문을 돌 때마다 한 단계를 거친다고 생각했다. while 문 내에서는 다음 노드들의 집합인 new
를 만들어주고, cur
에 들어있는 node 들에 대해서 방문하지 않은 (not in visited
) node 들만 new
에 추가해줬다.
new 에 추가된 노드들은 visited 에 추가해준다.
만약 new 가 없다면 다음 단계의 노드가 이제 존재하지 않는다는 것이다. (== 이미 cur
단계에서 모두 방문하였다는 뜻.) 그러므로 while 문을 멈추고 현재 cur
에 존재하는 노드의 개수를 return 한다.