[백준] 18352번: 특정 거리의 도시 찾기 - Kotlin[코틀린]

2023. 11. 28. 21:41·알고리즘/Baekjoon

문제

 

 

18352번: 특정 거리의 도시 찾기

첫째 줄에 도시의 개수 N, 도로의 개수 M, 거리 정보 K, 출발 도시의 번호 X가 주어진다. (2 ≤ N ≤ 300,000, 1 ≤ M ≤ 1,000,000, 1 ≤ K ≤ 300,000, 1 ≤ X ≤ N) 둘째 줄부터 M개의 줄에 걸쳐서 두 개

www.acmicpc.net

 


풀이

 

 주어진 도로와 도시 정보에서 모든 도시간의 거리가 1이라는 점을 이용해 너비 우선 탐색(BFS)으로 해결할 수 있다.

 

 시작 도시로부터 BFS를 수행하며 거리를 계산하고 거리 배열에 저장해준다. 여기서 모든 도시간의 거리가 1이기 때문에 도시에 처음 도착했을 때의 거리가 최단 거리일 것이다. 탐색이 끝난 후 찾으려는 거리에 도시가 있다면 도시를 출력해주고, 없다면 -1을 출력한다.

 


코드

 

import java.util.*

fun main() {
    val br = System.`in`.bufferedReader()
    val bw = System.out.bufferedWriter()

    val st = StringTokenizer(br.readLine())
    val city = st.nextToken().toInt()
    val road = st.nextToken().toInt()
    val street = st.nextToken().toInt()
    val first = st.nextToken().toInt()

    val distance = IntArray(city + 1){ -1 }
    val graph = ArrayList<ArrayList<Int>>()
    repeat(city+1){ graph.add(ArrayList()) }
    repeat(road) {
        with(StringTokenizer(br.readLine())) {
            graph[nextToken().toInt()].add(nextToken().toInt())
        }
    }

    fun bfs() {
        val queue : Queue<Int> = LinkedList()
        queue.offer(first)
        while (queue.isNotEmpty()) {
            val now = queue.poll()
            for(next in graph[now]) {
                if(distance[next] == -1) {
                    distance[next] = distance[now] + 1
                    queue.add(next)
                }
            }
        }
    }

    distance[first] = 0
    bfs()

    val sb = StringBuilder()
    var check = false
    for(i in 1 .. city) {
        if(distance[i] == street) {
            check = true
            sb.append("$i\n")
        }
    }

    bw.write(if(check) sb.toString() else "-1")
    bw.flush()
    bw.close()
    br.close()
}

 

'알고리즘 > Baekjoon' 카테고리의 다른 글

[백준] 4485번: 녹색 옷 입은 애가 젤다지? - Kotlin[코틀린]  (0) 2023.11.30
[백준] 2529번: 부등호 - Kotlin[코틀린]  (0) 2023.11.29
[백준] 17472번: 다리 만들기 2 - Kotlin[코틀린]  (0) 2023.11.24
[백준] 6479번: 전력난 - Kotlin[코틀린]  (0) 2023.11.22
[백준] 1774번: 우주신과의 교감 - Kotlin[코틀린]  (0) 2023.11.20
'알고리즘/Baekjoon' 카테고리의 다른 글
  • [백준] 4485번: 녹색 옷 입은 애가 젤다지? - Kotlin[코틀린]
  • [백준] 2529번: 부등호 - Kotlin[코틀린]
  • [백준] 17472번: 다리 만들기 2 - Kotlin[코틀린]
  • [백준] 6479번: 전력난 - Kotlin[코틀린]
junghoooooon
junghoooooon
  • junghoooooon
    코드팁스
    junghoooooon
  • 전체
    오늘
    어제
    • 전체 (120)
      • 안드로이드 (0)
        • 코드팁스 (0)
      • 유니티 (0)
        • 코드팁스 (0)
      • 알고리즘 (118)
        • 알고리즘 (0)
        • Baekjoon (118)
      • GitHub (0)
      • 티스토리 (2)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      유니온파인드
      그리디
      분리집합
      이분 탐색
      스택
      BFS
      프림
      피보나치
      그래프이론
      문자열
      구현
      DP
      dfs
      투 포인터
      소수 판정
      백트래킹
      수학
      정렬
      크루스칼
      재귀
      모듈러 곱셈 역원
      분할 정복
      브루트포스
      우선순위 큐
      MST
      에라토스테네스의 체
      큐
      누적 합
      티스토리
      그래프 탐색
    • hELLO· Designed By정상우.v4.10.2
    junghoooooon
    [백준] 18352번: 특정 거리의 도시 찾기 - Kotlin[코틀린]
    상단으로

    티스토리툴바