๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ฏ | ๋ฐฑ์ค€/๐Ÿ™‚ | Silver

[Kotlin, S2] ๋ฐฑ์ค€ 18352๋ฒˆ ํŠน์ • ๊ฑฐ๋ฆฌ์˜ ๋„์‹œ ์ฐพ๊ธฐ

by immgga 2024. 9. 10.

์ถœ์ฒ˜: unsplash.com

 

ํŠน์ • ๊ฑฐ๋ฆฌ์˜ ๋„์‹œ ์ฐพ๊ธฐ(18352๋ฒˆ)

Silver 2

#๊ทธ๋ž˜ํ”„ ์ด๋ก  #๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ #๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰ #์ตœ๋‹จ ๊ฒฝ๋กœ #๋ฐ์ดํฌ์ŠคํŠธ๋ผ

https://www.acmicpc.net/problem/18352

 

๋ฌธ์ œ ๋‚ด์šฉ

 

 

๋ฌธ์ œ ์ ‘๊ทผ

๋„์‹œ์˜ ๊ฐœ์ˆ˜, ๋„๋กœ์˜ ๊ฐœ์ˆ˜, ๊ตฌํ•ด์•ผ ํ•˜๋Š” ์ตœ๋‹จ ๊ฑฐ๋ฆฌ์™€ ์‹œ์ž‘ ์ง€์ ์ด ์ฃผ์–ด์งˆ ๋•Œ, ์‹œ์ž‘ ์ง€์  ๋„์‹œ์—์„œ ๋‹ค๋ฅธ ๋„์‹œ๋กœ ์ด๋™ํ•˜๋Š” ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๊ฐ€ ์ž…๋ ฅ๋ฐ›์€ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ์™€ ๊ฐ™์€ ๋„์‹œ ๋ฒˆํ˜ธ๋งŒ ์ถœ๋ ฅํ•œ๋‹ค. ์กฐ๊ฑด์— ๋งž๋Š” ๋„์‹œ๊ฐ€ ์—†์œผ๋ฉด -1์„ ์ถœ๋ ฅ.

 

๋„์‹œ๋Š” ๋ชจ๋‘ 1~N๊นŒ์ง€๊ฐ€ ์žˆ๋‹ค. ๋„๋กœ์˜ ๊ธธ์ด๋Š” ๋ชจ๋‘ 1์ผ ๋•Œ, ์ตœ๋‹จ ๊ฒฝ๋กœ ์ž…๋ ฅ๊ฐ’์„ K๋ผ๊ณ  ํ•  ๋•Œ, ์ถœ๋ฐœ ๋„์‹œ์—์„œ ๊ฐ ๋„์‹œ๋กœ ์ด๋™ํ•˜๋Š” ์ตœ๋‹จ ๊ฒฝ๋กœ๊ฐ€ K์™€ ๊ฐ™์€ ๋„์‹œ๋งŒ ์ถœ๋ ฅํ•œ๋‹ค.

bfs๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

 

bfs๋ฅผ ์“ฐ๊ธฐ ์œ„ํ•ด์„œ๋Š” ์–ด์จŒ๋“  ๊ทธ๋ž˜ํ”„๊ฐ€ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

4 4 2 1
1 2
1 3
2 3
2 4

 

์ด ์ž…๋ ฅ ์˜ˆ์ œ๋กœ ์–ด๋–ป๊ฒŒ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ตฌ์„ฑํ•ด์•ผ ํ• ๊นŒ?

๊ทธ๋ž˜ํ”„๋Š” ๊ฐ ๋„์‹œ์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ๋‹ค๋ฅธ ๋„์‹œ๋“ค์˜ ์ •๋ณด๋“ค์„ ์ €์žฅํ•˜๋Š” ํ˜•ํƒœ๋กœ ๊ตฌ์„ฑํ•˜๋ฉด ๋œ๋‹ค.

์œ„์˜ ์ž…๋ ฅ ์˜ˆ์ œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ๋Š”

  1. ๋„์‹œ 1์—๋Š” 2, 3
  2. ๋„์‹œ 2์—๋Š” 3, 4
  3. ๋„์‹œ 3์€ ์—†์Œ
  4. ๋„์‹œ 4๋Š” ์—†์Œ

๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ทธ๋ž˜ํ”„๋ฅผ ๊ตฌ์„ฑํ•ด ์ค„ ์ˆ˜ ์žˆ๋‹ค.

์‚ฌ์ง„ 1-1, ์ž…๋ ฅ ์˜ˆ์ œ 1์˜ ๊ตฌ์กฐ

๊ทธ๋Ÿฌ๋ฉด ์‚ฌ์ง„ 1-1์˜ ๊ฒฐ๊ณผ๋ฅผ 2์ค‘ list๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

๋„๋กœ์˜ ๋ฐฉํ–ฅ์ด ๋‹จ๋ฐฉํ–ฅ์ด๋‹ค. ํ•œ ๋ฒˆ ๋– ๋‚œ ๋„์‹œ๋Š” ๋‹ค์‹œ๋Š” ๋ฐฉ๋ฌธํ•˜๋ฉด ๋ฐฉ๋ฌธํ•  ์ˆ˜ ์—†์–ด์•ผ ํ•œ๋‹ค. ๋‹ค์‹œ ๋ฐฉ๋ฌธํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๊ฐ€ ์•„๋‹ˆ๊ฒŒ ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด 1 -> 3์œผ๋กœ ๊ฑฐ๋ฆฌ๊ฐ€ 1์ธ ๊ฒฝ์šฐ์™€ 1 -> 2 -> 3์œผ๋กœ ๊ฑฐ๋ฆฌ๊ฐ€ 2์ธ ๊ฒฝ์šฐ ์ด 2๊ฐœ๊ฐ€ ์žˆ๋Š”๋ฐ ๋„์‹œ 3์œผ๋กœ ๊ฐ€๋Š” ์ตœ๋‹จ ๊ฒฝ๋กœ๋Š” 1์ด ๋˜์–ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ์žฌ๋ฐฉ๋ฌธ์„ ๋ง‰์•„ ์ฃผ์–ด์•ผ ํ•œ๋‹ค.

 

 

๋ฌธ์ œ ํ•ด๊ฒฐ ์ฝ”๋“œ

๋”๋ณด๊ธฐ
import java.io.BufferedReader
import java.io.InputStreamReader
import java.util.LinkedList
import java.util.Queue

private var cities = arrayOf(mutableListOf<Int>())
private var visited = booleanArrayOf()
private val answer = mutableListOf<Int>()

private var city = 0
private var road = 0
private var minDistance = 0

fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {
    val input = readLine().split(" ").map { it.toInt() }
    val start = input[3]

    city = input[0]
    road = input[1]
    minDistance = input[2]
    cities = Array(city + 1) { mutableListOf() }
    visited = BooleanArray(city + 1)

    for (i in 0 until road) {
        val roadInfo = readLine().split(" ").map { it.toInt() }
        val roadStart = roadInfo[0]
        val roadEnd = roadInfo[1]
        cities[roadStart].add(roadEnd)
    }

    bfs(start)

    answer.sort()
    if (answer.isEmpty()) println(-1)
    else println(answer.joinToString("\n"))
}

private fun bfs(start: Int) {
    val queue: Queue<List<Int>> = LinkedList()
    queue.add(listOf(start, 0))
    visited[start] = true

    while (queue.isNotEmpty()) {
        val data = queue.poll()
        val beforeCity = data[0]
        val currentDistance = data[1]

        if (currentDistance == minDistance) answer.add(beforeCity)

        for (i in cities[beforeCity]) {
            if (!visited[i]) {
                visited[i] = true
                queue.add(listOf(i, currentDistance + 1))
            }
        }
    }
}

 

๋ฌธ์ œ ํ’€์ด

๊ทธ๋ž˜ํ”„๋ฅผ cities๋กœ ์ •์˜ํ•˜๊ณ  ์ž…๋ ฅ๋ฐ›์œผ๋ฉด์„œ ๊ทธ๋ž˜ํ”„๋ฅผ ์ •์˜ํ•˜๊ณ  ๋ฐฉ๋ฌธ ์—ฌ๋ถ€๋„ visited๋กœ ์„ค์ •ํ•ด ์ค€๋‹ค.

visited๋ฅผ 2์ค‘ ๋ฆฌ์ŠคํŠธ๋กœ ์„ค์ •ํ•˜์ง€ ์•Š์€ ์ด์œ ๋Š” ํ˜„์žฌ ๋„์‹œ์˜ ๋ฐฉ๋ฌธ ์—ฌ๋ถ€๋งŒ ํŒ๋‹จํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— 2์ค‘ ๋ฆฌ์ŠคํŠธ๋กœ ๊ตฌ์„ฑํ•  ํ•„์š”๊ฐ€ ์—†์–ด์„œ ์ด๋‹ค.

bfs๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ฐ ๋„์‹œ ๊ฐ„์˜ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•ด์ค€๋‹ค.

์šฐ์„  ์‹œ์ž‘ ๋„์‹œ๋Š” ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๊ฐ€ 0์ด๊ธฐ ๋•Œ๋ฌธ์—, queue์— ๋„์‹œ ๋ฒˆํ˜ธ์™€ 0์„ ์ €์žฅํ•œ๋‹ค. ์ด์ œ 0์ด 1์”ฉ ๋”ํ•ด์ง€๋ฉด์„œ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๊ตฌํ•˜๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค.

์ด์ „ ๋„์‹œ์—์„œ ๋‹ค์Œ ๋„์‹œ๋กœ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฒฝ๋กœ๋ฅผ for๋ฌธ์œผ๋กœ ํƒ์ƒ‰ํ•˜๊ณ  ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋„์‹œ์ผ ๋•Œ๋งŒ queue์— ๋„ฃ์–ด ์ฃผ๋Š” ์ž‘์—…์„ ์ง„ํ–‰ํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  queue์—์„œ ๊บผ๋‚ด์˜จ ๊ฐ’์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ๊ฐ€ ํ˜„์žฌ ์šฐ๋ฆฌ๊ฐ€ ๊ตฌํ•ด์•ผ ํ•˜๋Š” ์ตœ๋‹จ ๊ฒฝ๋กœ์ธ minDistance์™€ ์ผ์น˜ํ•œ๋‹ค๋ฉด answer์— ์ถ”๊ฐ€ํ•œ๋‹ค.

answer๋Š” bfs๊ฐ€ ๋๋‚˜๊ณ  sort ํ•ด์„œ ์ถœ๋ ฅํ•œ๋‹ค. answer๊ฐ€ ๋น„์–ด ์žˆ์œผ๋ฉด -1์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

 

๋ฌธ์ œ ํ•ด๊ฒฐ ๊ณผ์ •

ํ‰๋ฒ”ํ•œ bfs ๋ฌธ์ œ, ์›๋ž˜๋Š” ๋ฐ์ดํฌ์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์—ฐ์Šต ๋ฌธ์ œ์˜€๋˜ ๊ฒƒ ๊ฐ™์ง€๋งŒ, ์ž˜ ์•Œ์ง€๋„ ๋ชปํ•˜๋Š”๋ฐ ๋‚ด๊ฐ€ ์•„๋Š” ๊ฑธ๋กœ ํ’€์–ด์•ผ์ง€ ์–ด์ฉŒ๊ฒ ๋Š”๊ฐ€?

๋ฐ์ดํฌ์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ผ๋‹จ ๊ธฐ์–ตํ•ด ๋‘์—ˆ๋‹ค๊ฐ€ ๋‚˜์ค‘์— ๋”ฐ๋กœ ๊ณต๋ถ€๋ฅผ ํ•ด๋ณผ๊นŒ?

๋‚œ์ด๋„ ์ž์ฒด๋Š” ๋ฌด๋‚œํ–ˆ๋‹ค. bfs๋กœ ํ’€ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด ์ข‹์•˜๋‹ค.

728x90