[Swift/Python]プログラマー(Lv 3)-最も遠いノード
こんにちは!
https://programmers.co.kr/learn/courses/30/lessons/49189
この問題の主な目的は最短経路を探すことであるため、
双方向グラフィックスの作成(Graph)、ノードにアクセスするかどうかをチェックする配列(Check)、最大距離を格納する変数(maxDist)、および私たちが解くべき答えを格納する変数(答え)を作成します.
問題はの最初のノードから、 キューから減算された距離がmaxDistより大きい場合、その距離値はmaxDistに格納される.
=>maxDistより大きい場合は、新しい最大距離値が作成されるのではないでしょうか.
だから答えを0にする! の次のノードがアクセスしていない場所にキューを入れます. swiftコードです
https://programmers.co.kr/learn/courses/30/lessons/49189
に答える
この問題の主な目的は最短経路を探すことであるため、
BFS
として実施される.双方向グラフィックスの作成(Graph)、ノードにアクセスするかどうかをチェックする配列(Check)、最大距離を格納する変数(maxDist)、および私たちが解くべき答えを格納する変数(答え)を作成します.
問題は
첫번째 노드
と현재거리 0
をキューに入れることです!=>maxDistより大きい場合は、新しい最大距離値が作成されるのではないでしょうか.
だから答えを0にする!
import Foundation
func solution(_ n:Int, _ edge:[[Int]]) -> Int {
var graph :[Int: [Int]] = [:]
for route in edge {
let a = route[0]
let b = route[1]
if !graph.keys.contains(a) {
graph[a] = []
}
if !graph.keys.contains(b) {
graph[b] = []
}
graph[a]!.append(b)
graph[b]!.append(a)
}
var check = [Bool](repeating: false, count: n + 1)
check[0] = true
check[1] = true
var maxDist = -1
var answer = 0
var q = [(node: Int, dist: Int)]()
q.append((1, 0))
while !q.isEmpty {
let route = q.removeFirst()
if route.dist > maxDist {
maxDist = route.dist
answer = 0 // 새로운 maxDist가 저장되었으니 answer를 0으로 초기화
}
answer += 1
for next in graph[route.node]! {
if !check[next] {
check[next] = true
q.append((next, route.dist + 1))
}
}
}
return answer
}
Pythonコードですdef solution(n, edge):
graph = {}
for item in edge:
i, j = item
if i not in graph:
graph[i] = []
if j not in graph:
graph[j] = []
graph[i].append(j)
graph[j].append(i)
q = []
check = [False] * (n+1)
q.append((1, 0))
check[0] = True
check[1] = True
max_depth = -1
ans = 0
while q:
x, depth = q.pop(0)
if depth > max_depth:
ans = 0
max_depth = depth
ans += 1
for next_pos in graph[x]:
if not check[next_pos]:
check[next_pos] = True
q.append((next_pos, depth+1))
return ans
Reference
この問題について([Swift/Python]プログラマー(Lv 3)-最も遠いノード), 我々は、より多くの情報をここで見つけました https://velog.io/@kerri/Swift-Python-프로그래머스Lv3-가장-먼-노드テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol