프로그래머스

[프로그래머스][Kotlin]가장 먼 노드

끝까지 처음처럼 2023. 4. 12. 19:06
728x90

해당 문제는 BFS 사용하여 작성 할 수 있으며, 작성 시 주의 할 점은 출발 점은 항상 1번 노드라는 점과

BFS를 공부하신 분들은 알겠지만 방문처리 등등 은 deque에 넣을 때 동시에 해야 된다는 점입니다.

 

하기는 제가 작성한 코드와 실행 결과 입니다.

 

import java.util.ArrayDeque

class Solution {
    fun solution(n: Int, edge: Array<IntArray>): Int {
        var len = IntArray(n+1){0} // 거리를 저장할 배열
        var node = Array(n+1,{ArrayList<Int>()})
        var visit = BooleanArray(n+1){true}
        edge.forEach {
            node[it[0]].add(it[1])
            node[it[1]].add(it[0])
        }

        var dq = ArrayDeque<Int>()
        dq.add(1)
        len[1] = 0

        var max = 0
        while(!dq.isEmpty()){
            var now = dq.pollFirst()
            visit[now] = false

            for(i in 0 .. node[now].size-1){
                if(visit[node[now][i]]){
                    visit[node[now][i]] = false
                    dq.addLast(node[now][i])
                    len[node[now][i]] = len[now]+1
                    max = len[now]+1
                }
            }

        }
        return len.count{e -> e == max}
    }
}
테스트 1 통과 (0.07ms, 62.3MB)
테스트 2 통과 (0.11ms, 61.7MB)
테스트 3 통과 (0.15ms, 61MB)
테스트 4 통과 (0.86ms, 59.7MB)
테스트 5 통과 (2.68ms, 61.8MB)
테스트 6 통과 (5.60ms, 65.4MB)
테스트 7 통과 (18.65ms, 76.1MB)
테스트 8 통과 (36.53ms, 84.7MB)
테스트 9 통과 (35.25ms, 83MB)