728x90
https://www.acmicpc.net/problem/1697
1697번: 숨바꼭질
수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일
www.acmicpc.net
문제 풀이
1. N 을 시작 지점, K 를 목표 지점으로 하여 BFS 를 수행한다.
2. 이때 시작 시점과 목표 지점이 같으면 탐색을 종료 한다.
3. 큐에는 (시작 지점, 현재까지의 걸린 시간) 을 저장한다.
4. BFS 에서 (앞으로 걷는 경우, 뒤로 걷는 경우, 순간 이동 하는 경우) 에 대해서 탐색한다.
코드
import java.io.*
import java.util.*
fun main(args: Array<String>) {
val br = BufferedReader(InputStreamReader(System.`in`))
val (N, K) = br.readLine().split(" ").map { it.toInt() }
println("${bfs(N, K)}")
}
private fun bfs(start: Int, K: Int): Int {
val queue = LinkedList<Pair<Int, Int>>()
queue.add(Pair(start, 0))
val visit = BooleanArray(100001) { false }
visit[start] = true
var result = 0
while (queue.isNotEmpty()) {
val (curPosition, curTime) = queue.pop()
//println("curPosition : $curPosition, curTime : $curTime")
if (curPosition == K) {
result = curTime
break
}
for (i in 0..2) {
val next = when (i) {
0 -> curPosition - 1
1 -> curPosition + 1
else -> curPosition * 2
}
if (next < 0 || next > 100000) continue
if (visit[next]) continue
visit[next] = true
queue.add(Pair(next, curTime + 1))
}
}
return result
}
728x90
'알고리즘(w.KOTLIN) > 그래프(bfs, dfs, 다익스트라)' 카테고리의 다른 글
[백준][코틀린][13913] 숨바꼭질4 (0) | 2023.02.20 |
---|---|
[백준][코틀린][1697] 숨바꼭질 (0) | 2023.02.20 |
[백준][코틀린][2146] 다리 만들기 (0) | 2023.02.17 |
[백준][코틀린][16947] 서울 지하철 2호선 (0) | 2023.02.16 |
[백준][KOTLIN][16929] Two Dots (0) | 2023.02.14 |