Home 프로그래머스 - 49189 가장 먼 노드
Post
Cancel

프로그래머스 - 49189 가장 먼 노드

문제

49189 가장 먼 노드

screencapture

풀이

  1. 너비 우선 탐색(bfs)을 한다.
  2. 시작 노드를 거리를 0으로 설정하고 큐에 넣고, 탐색을 시작한다.
  3. 큐에서 노드를 꺼낸다.
  4. 이미 방문한 노드라면 처음으로 돌아간다.
  5. 연결된 노드들을 거리를 현재 노드의 거리 + 1로 설정하고 큐에 넣는다.
  6. 큐가 비면 탐색을 종료하고 마지막으로 탐색한 노드들과 같은 거리의 노드들의 수를 출력한다.

kotlin code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class Solution {
    fun solution(n: Int, edge: Array<IntArray>): Int {
        val map = (edge.map { intArrayOf(it[1], it[0]) } + edge).groupBy { it.first() }.map { Pair(it.key, it.value.map { m -> m.last() }.toSet() ) }.toMap()
        val visited = BooleanArray(n+1)
        val queue:java.util.Queue<Node> = java.util.LinkedList()
        queue.offer(Node(1, 0))

        var answer = 0
        var nowDistance = 0
        while (queue.isNotEmpty()) {
            val node = queue.poll()
            if(visited[node.num]) continue
            answer++
            if(node.distance != nowDistance)  {
                nowDistance = node.distance
                answer = 1
            }
            for(des in map[node.num] ?: setOf()) {
                queue.offer(Node(des, node.distance+1))
            }
            visited[node.num] = true
        }

        return answer
    }
}

data class Node(val num:Int, val distance:Int)
This post is licensed under CC BY 4.0 by the author.

프로그래머스 - 43238 입국심사

도메인 주도 설계 첫걸음 - 04장 바운디드 컨텍스트 연동