๋ฑ๊ณผ ์ฌ๋ค๋ฆฌ ๊ฒ์(16928๋ฒ)
Gold 5
#๊ทธ๋ํ ์ด๋ก #๊ทธ๋ํ ํ์ #๋๋น ์ฐ์ ํ์
https://www.acmicpc.net/problem/16928
๋ฌธ์ ๋ด์ฉ
๋ฌธ์ ์ ๊ทผ
1๋ถํฐ 100๋ฒ์งธ ์นธ๊น์ง ์กด์ฌํ๋ ๋ฑ๊ณผ ์ฌ๋ค๋ฆฌ ๊ฒ์ํ์ด ์กด์ฌํ ๋, n๊ฐ์ ์ฌ๋ค๋ฆฌ์ m๊ฐ์ ๋ฑ์ด ์๋ค.
์ฌ๋ค๋ฆฌ๋ฅผ ๋ฐ์ผ๋ฉด ์๋ก ์ด๋ํ๊ณ ๋ฑ์ ๋ฐ์ผ๋ฉด ์๋๋ก ๋ด๋ ค๊ฐ๋ค.
์ ๋ ฅ ์์ 1์ ์๋ก ๋ค๋ฉด
3 7
32 62
42 68
12 98
95 13
97 25
93 37
79 27
75 19
49 47
67 17
์ฌ๋ค๋ฆฌ๊ฐ 3๊ฐ, ๋ฑ์ด 7๊ฐ ์๊ณ 2๋ฒ์งธ ์ค๋ถํฐ ์์๋๋ก ์ฌ๋ค๋ฆฌ, ๋ฑ์ ์ ๋ ฅ๋ฐ๋๋ค.
์ซ์ 2๊ฐ๊ฐ ์๋๋ฐ, ์ฌ๋ค๋ฆฌ 32 62๋ฅผ ์๋ก ๋ค๋ฉด 32๋ฅผ ๋ฐ๊ฒ ๋๋ฉด 62๋ก ์ด๋ํ๊ณ , 4๋ฒ์งธ ์ค์ธ ๋ฑ 95 13์ ๊ฒฝ์ฐ๋ 95๋ฅผ ๋ฐ์ผ๋ฉด 13์ผ๋ก ๋ด๋ ค๊ฐ๋ค.
์ฃผ์ฌ์๋ฅผ ์ ๊ฒ ๋๋ฆฌ๋ฉด์ ๋ง์ 100๊น์ง ์ฎ๊ฒจ์ผ ํ๋ค. ์ ๋ ฅ ์์ 1์ ์ ๋ต์ 3์ด๋ค.
1์์ ์์ํด 6์ผ๋ก ๋๋ ค 7๋ก ์ด๋ํ๊ณ 5๋ฅผ ๋๋ ค 12๋ก ์ด๋ํ๋ฉด 98๋ก ์ฌ๋ค๋ฆฌ๋ฅผ ํ๊ณ ์ด๋ํ๋ค. 2๋ฅผ ๋๋ฆฌ๋ฉด 100์ ๋๋ฌํ๋ค.
1 -> 7 -> 98 -> 100์ ์์๋ก ์ฃผ์ฌ์๋ฅผ 3๋ฒ ๋๋ฆฌ๋ฉด 100์ ๋๋ฌํ๋ค.
์ฃผ์ฌ์๋ฅผ ๊ตด๋ฆฌ๋ ์ต์๊ฐ์ ๊ตฌํ๊ธฐ ์ํด์๋ 1๋ถํฐ 6๊น์ง ์ฃผ์ฌ์๋ฅผ ๋๋ฆฌ๋ ๊ฒฝ์ฐ๋ฅผ ๋ชจ๋ ํ์ธํด์ ๊ฐ์ฅ ๋จผ์ 100์ ๋๋ฌํ๋ ๊ฒฝ์ฐ๊ฐ ์ ์ผ ๋น ๋ฅธ(์ต์๊ฐ) ๊ฒฝ์ฐ๊ฐ ๋ ๊ฒ์ด๋ค.
ํ์ฌ ์์น๋ ์ฒ์์๋ 1๋ก ์ค์ ํ๋ค.
์ด์ 1์์ 1๋ถํฐ 6๊น์ง ์ฃผ์ฌ์๋ฅผ ๋๋ ค ๊ฐ๋ฉด์ ์์ง์ธ ๊ฐ์ ๋ฑ ๋๋ ์ฌ๋ค๋ฆฌ๊ฐ ์๋์ง ํ์ธํ๋ค. ๋ง์ฝ ๋ฑ ๋๋ ์ฌ๋ค๋ฆฌ๊ฐ ์์ผ๋ฉด ๋ง๊ฒ ๋ง์ ์ถ๊ฐ๋ก ์ด๋ํ๋ค.
์ด๋์ด ์๋ฃ๋๋ฉด ๋ฐฉ๋ฌธ ํ์๋ฅผ ํ๋ค. ๋ค์ ๊ทธ ๋ ์ ๋ค์ ๋ฐ๊ฒ ๋์์ ๋๋ ์ฒ์์ ๋ฐ์๋ ๊ฒฝ์ฐ๋ณด๋ค ๋ ์ฃผ์ฌ์๋ฅผ ๊ตด๋ ค์ผ ํ๋ ๊ฒฝ์ฐ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
ํ๋ก์ธ์ค ๊ณผ์ ์ ๊ฐ๋จํ๊ฒ ํ๋ก ๊ตฌ์ฑํด ๋ณด์๋ค.
์ด๊ธฐ 1์ ์ฃผ์ฌ์๋ฅผ 0๋ฒ ๊ตด๋ฆฌ๊ธฐ ๋๋ฌธ์ move๊ฐ 0์ด๋ค. 1์์ ์ฃผ์ฌ์๋ฅผ 1๋ถํฐ 6์ ๊ตด๋ฆฌ๋ ๊ฒฐ๊ณผ๊ฐ 2, 3, 4, 5, 6, 7์๋ move๋ฅผ 1๋ก ์ค์ ํ๋ค. ๋๊ฐ์ด 8, 9, 10, 11, 12, 13์๋ ์ด์ ๊ณผ ๊ฐ์ด move๋ฅผ 2๋ก ์ค์ ํ๋ค.
12๋ฒ์งธ ์นธ์ 98๋ก ํฅํ๋ ์ฌ๋ค๋ฆฌ๊ฐ ์์ผ๋ฏ๋ก 98๋ก ์ด๋ํ๋ค. ์ฃผ์ฌ์๋ฅผ ๊ตด๋ฆฌ์ง ์๊ณ 98๋ก ์ด๋ํ๊ธฐ ๋๋ฌธ์ move๋ ๋ณํ์ง ์๋๋ค.
์ด์ 98์์ 99, 100์ ์ฃผ์ฌ์๋ฅผ 1๋ฒ ๋ ๊ตด๋ ค์(move: 3) ๋ง๋ค ์ ์๋ค. 100์ ๋๋ฌํ์ผ๋ฏ๋ก 3์ ์ถ๋ ฅํ๋ค.
๋ฌธ์ ํด๊ฒฐ ์ฝ๋
import java.io.BufferedReader
import java.io.InputStreamReader
import java.util.*
private val ladderSnake = mutableMapOf<Int, Int>()
private val visited = BooleanArray(101)
private var result = 0
fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {
val (ladder, snake) = readLine().split(" ").map { it.toInt() }
for (i in 1 .. ladder) {
val (ladderStart, ladderEnd) = readLine().split(" ").map { it.toInt() }
ladderSnake[ladderStart] = ladderEnd
}
for (i in 1 .. snake) {
val (snakeStart, snakeEnd) = readLine().split(" ").map { it.toInt() }
ladderSnake[snakeStart] = snakeEnd
}
bfs()
println(result)
}
private fun bfs() {
val queue = ArrayDeque<List<Int>>()
queue.addFirst(listOf(1, 0)) // ํ์ฌ ์์น, ์์ง์ธ ํ์
visited[1] = true
while (queue.isNotEmpty()) {
val data = queue.removeLast()
val locate = data.first()
val move = data.last()
if (locate >= 100) {
result = move
return
}
for (m in 1 .. 6) {
val location = locate + m
if (location > 100) continue
if (visited[location]) continue
if (ladderSnake.containsKey(location)) {
queue.addFirst(listOf(ladderSnake[location]!!, move + 1))
visited[ladderSnake[location]!!] = true
} else {
queue.addFirst(listOf(location, move + 1))
visited[location] = true
}
}
}
}
๋ฌธ์ ํ์ด
์ฌ๋ค๋ฆฌ์ ๋ฑ์ ์ ์ฅํ map์ ์์ฑํ๋ค. key๊ฐ ์๋ํ๋ ์นธ์ด๊ณ , value๋ฅผ ์ด๋๋๋ ์นธ์ผ๋ก ์ค์ ํ๋ค.
visited๋ก ๋ฐฉ๋ฌธ ์ฌ๋ถ๋ฅผ ํ์ธํด ์ค์ผ ํ๋ค.
ladderSnake์ ladder์ snake๋ฅผ ์ ๋ ฅ๋ฐ์์ ์ ์ฅํด ์ค๋ค.
๊ทธ๋ค์ bfs๋ฅผ ์ํํ๋ค.
bfs์๋ queue๋ฅผ ์ด์ฉํด ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค.
queue๋ฅผ arrayDeque๋ฅผ ์ฌ์ฉํด์ move๊ฐ ์ ์ ์์ผ๋ก ๋จผ์ ์๋ํ๋๋ก ํด์ค๋ค.
arrayDeque์๋ list๋ก ์ ๋ ฅ๋ฐ๋๋ฐ, ํ์ฌ ์๋ ์นธ์ ์์ง, ์์ง์ธ ํ์๋ฅผ ์ ๋ ฅ๋ฐ๋๋ค.
์ด๊ธฐ์๋ 1๋ฒ์งธ ์นธ์ ์๊ธฐ ๋๋ฌธ์, ์นธ์ 1๋ก, ์์ง์ธ ํ์๋ฅผ 0์ผ๋ก ์ค์ ํ๋ค.
๊ทธ๋ฆฌ๊ณ 1๋ฒ visited๋ฅผ ์ฒดํฌํ๋ค.
queue๊ฐ ๋น ๋๊น์ง ๋ฐ๋ณตํ๋ค.
๋ฐ๋ณต๋ฌธ์๋ ์ฃผ์ฌ์๋ฅผ 1๋ถํฐ 6๊น์ง ๋๋ฆฌ๋ ๊ฒฝ์ฐ๋ฅผ ๋ชจ๋ ํ์ธํ๋ค.
์ฃผ์ฌ์๋ฅผ ๋๋ ค ์์ง์ธ ์์น๋ฅผ location์ ์ ์ฅํ๊ณ visited์ location๋ฒ์งธ ๋ฐ์ดํฐ๊ฐ ์ด๋ฏธ ๋ฐฉ๋ฌธํ ๋ฐ์ดํฐ์ด๋ฉด ๋์ด๊ฐ๋ค. ๋ํ location์ด 100์ด ๋์ด๊ฐ๊ฒ ๋๋ฉด visited๋ฅผ ์ฒดํฌํ๋ ๊ฒ ๋ถ๊ฐ๋ฅํ๋ค(visited์ size๊ฐ 101์ด๋ค).
location์ด ladderSnake์ ์์ ์นธ์ ๋ค์ด๊ฐ๋ฉด value์ ์นธ์ผ๋ก ์ด๋์ํจ ๊ฒฐ๊ณผ๋ฅผ queue์ ๋ด์ ์ค๋ค.
์๋ ๊ฒฝ์ฐ์๋ location์ queue์ ๋ฃ์ด ์ค๋ค.
๋ฌธ์ ํด๊ฒฐ ๊ณผ์
ํ์ฌ ์ฌ์ฉ์์ ์์น๋ฅผ ๊ตณ์ด List๋ฅผ ๋ง๋ค์ด ์ ์ฅํ ํ์๊ฐ ์์๋ ๋ฌธ์ ์๋ค.
๊ธฐ์กด์ ๊ทธ๋ํ ํ์ ๋๋ graph List๋ฅผ ๋ง๋ค์ด์ ์ฌ์ฉํ์๋๋ฐ, ์ด๋ฒ ๋ฌธ์ ์๋ ๋ง๋ค์ง ์์๋ ๋๋ค.
queue์ ํ์ฌ ์นธ์ ์๋ ์์น๋ฅผ ์ ์ฅํด์ ์ฌ์ฉํ๋ค.
๋ก์ง ๊ตฌ์ฑ์ ๋ํ ์์ธ ์ฒ๋ฆฌ ๋๋ฌธ์ ํ ๋ธ๋ก๊ทธ์ ํด์ค ์ฝ๋๋ฅผ ์ฐธ๊ณ ํ๋ค.
'๐ฏ | ๋ฐฑ์ค > ๐ | Gold' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Kotlin, G5] ๋ฐฑ์ค 10827๋ฒ a^b (0) | 2024.09.19 |
---|---|
[Kotlin, G1] ๋ฐฑ์ค 1300๋ฒ K๋ฒ์งธ ์ (0) | 2024.09.09 |
[Kotlin, G5] ๋ฐฑ์ค 1013๋ฒ Contact (0) | 2024.08.07 |
[Kotlin, G5] ๋ฐฑ์ค 1011๋ฒ Fly me to the Alpha Centauri (0) | 2024.07.30 |
[Kotlin, G3] ๋ฐฑ์ค 2812๋ฒ ํฌ๊ฒ ๋ง๋ค๊ธฐ (0) | 2024.07.29 |