[プログラマLV 3]最も遠いノード[プログラマLV 3]最も遠いノード
方法
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ノードは가장 먼 노드
正解をコミットします.しかし,距離を宣言する方法(二重複文)よりも,一つの複文(三重複文)を追加する複文の方が高速である.
しかし、宣言の直観性と条理性のため、このような解釈は定式に近い!
Reference
この問題について([プログラマLV 3]最も遠いノード[プログラマLV 3]最も遠いノード), 我々は、より多くの情報をここで見つけました https://velog.io/@jwisgenius/프로그래머스-LV3-가장-먼-노드프로그래머스-LV3-가장-먼-노드テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol