HIT해

[Swift/프로그래머스] 가장 먼 노드 ( 그래프 , BFS ) 본문

Swift/Swift 알고리즘

[Swift/프로그래머스] 가장 먼 노드 ( 그래프 , BFS )

힛해 2024. 11. 2. 02:51
728x90

https://school.programmers.co.kr/learn/courses/30/lessons/49189

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

이전에 풀었던 문제지만 복습삼아 한번 더 풀어보았다.

 

인접 리스트 만드는 방법

 var graph = [[Int]](repeating: [], count:n+1)
    
    for i in edge {
        graph[i[0]].append(i[1])
        graph[i[1]].append(i[0])
    }

 

큐 만드는 방법

var queue = [Int]()
var visited = [Bool](repeating:false, count:n+1)

 

주의할 점으로는 queue 는 Int 배열을 담는게 아닌 Int값을 담는 배열이면 된다.

 

풀이

import Foundation


func solution(_ n: Int, _ edge: [[Int]]) -> Int {
    
   var graph = [[Int]](repeating: [], count:n+1)
    
    for i in edge {
        graph[i[0]].append(i[1])
        graph[i[1]].append(i[0])
    }
    
    var queue = [Int]()
    var visited = [Bool](repeating:false, count:n+1)
    var distance = [Int](repeating:0,count:n+1)
    queue.append(1)
    visited[1] = true
    while !queue.isEmpty{
        let node = queue.removeFirst()
        for i in graph[node]{
            if !visited[i]{
                visited[i] = true
                queue.append(i)
                distance[i] = distance[node] + 1
            } 
        }
    }
    
    let maxnum = distance.max()!
    
    print(maxnum)
    let arr = distance.filter{ $0 == maxnum}.count
    
    return arr

    
}