[Swift/Python]プログラマー(Lv 3)-最も遠いノード


こんにちは!
https://programmers.co.kr/learn/courses/30/lessons/49189


に答える


この問題の主な目的は最短経路を探すことであるため、BFSとして実施される.
双方向グラフィックスの作成(Graph)、ノードにアクセスするかどうかをチェックする配列(Check)、最大距離を格納する変数(maxDist)、および私たちが解くべき答えを格納する変数(答え)を作成します.
問題は
  • の最初のノードから、첫번째 노드현재거리 0をキューに入れることです!
  • キューから減算された距離がmaxDistより大きい場合、その距離値はmaxDistに格納される.
    =>maxDistより大きい場合は、新しい最大距離値が作成されるのではないでしょうか.
    だから答えを0にする!
  • の次のノードがアクセスしていない場所にキューを入れます.
  • swiftコードです
    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