[プログラマLV 3]最も遠いノード[プログラマLV 3]最も遠いノード



方法

  • 最遠ノードとは1 에서 가장 먼 노드自分の下にサブノードがないノードではない.
  • 各ノードが1からどのくらい離れているかを知るのは簡単です.
  • 使用
  • BFS各ノードの距離を確認します.(현재 노드까지의 거리 = 이전 노드의 거리 + 1)
  • from collections import deque
    def solution(n, vertex):
        graph = {} # Graph를 그려줘야한다, 매개변수 vertex는 단뱡향으로 주어졌지만, 사실 양방향으로 확인가능하다.
    
        for from_, to_ in vertex:
            if from_ in graph:
                graph[from_].append(to_)
            else:
                graph[from_] = [to_]
    
            if to_ in graph:
                graph[to_].append(from_)
            else:
                graph[to_] = [from_]
    
        start = 1 #최상단 노드 = 1
        distances = [0] * (n + 1) # 1~N노드의 (1과 의) 거리를 나타내는 List 각 위치에 있는 값은 1까지와의 거리를 나타낸다
        queue = deque([start])
        visit = [False] * (n + 1)
        visit[start] = True
    
        while queue:
            v = queue.popleft()
            for node in graph[v]:
                if not visit[node]:
                    distances[node] = distances[v] + 1 # `현재 노드까지의 거리 = 이전 노드의 거리 + 1`
                    queue.append(node)
                    visit[node] = True
    
        return len([x for x in distances if x == max(distances)]) # `가장 거리가 긴 노드와 같은 노드의 갯수만 확인`

    反省する

  • distances変数は他人の解答を見て真似したものです.

  • どうやって作ったの?

  • queue = [[ Level이 같은 노드들 ]]同じ距離にあるノードをこのように入れるqueue

  • 同じ距離にある各ノードが持つ次のノードを入れるtemp変数のうち、すべてのノードが入るtemp変数の後
    入っているqueue
  • queueのすべてのノードを迂回し、いずれのノードにも次のノードがある場合、そのキューに最後に残ったlevelノードは가장 먼 노드正解をコミットします.

  • しかし,距離を宣言する方法(二重複文)よりも,一つの複文(三重複文)を追加する複文の方が高速である.

  • しかし、宣言の直観性と条理性のため、このような解釈は定式に近い!