[Programmers] 가장 먼 노드

김가영·2021년 2월 21일
0

Algorithm

목록 보기
59/78
post-thumbnail
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 한다.

profile
개발블로그

0개의 댓글