728x90
https://www.acmicpc.net/problem/14226
14226번: 이모티콘
영선이는 매우 기쁘기 때문에, 효빈이에게 스마일 이모티콘을 S개 보내려고 한다. 영선이는 이미 화면에 이모티콘 1개를 입력했다. 이제, 다음과 같은 3가지 연산만 사용해서 이모티콘을 S개 만
www.acmicpc.net
문제 풀이
1. 주어진 조건에 따라 BFS 로 탐색한다.
2. 이전 탐색을 방문했는 지 확인하는 visit 배열을 2차원으로 선언하고 현재 화면의 이모티콘과 클립보드에 있는 이모티콘을 index 하여 방문 여부를 업데이트 하고 확인한다. (visit[currentEmo][clipEmo])
3. clipEmo 와 curEmo 값이 0보다 작거나 1000을 넘어갈 경우 조건 밖의 경우이므로 제외 한다.
코드
import java.io.*
import java.util.*
fun main(args: Array<String>) {
val br = BufferedReader(InputStreamReader(System.`in`))
val S = br.readLine().toInt()
bfs(1, S)
}
private fun bfs(start: Int, target: Int) {
val queue = LinkedList<Triple<Int, Int, Int>>() // (현재 이모티콘, 클립보트 이모티콘, 소요 시간)
queue.add(Triple(start, 0, 0))
val visit = Array(1001) { BooleanArray(1001) { false } }
while (queue.isNotEmpty()) {
val (curEmo, clipEmo, time) = queue.pop()
if (curEmo == target) {
println(time)
break
}
if ((clipEmo > 1000 || clipEmo < 0) || (curEmo > 1000 || curEmo < 0)) continue
if (visit[curEmo][clipEmo]) continue
visit[curEmo][clipEmo] = true
//println("current : $curEmo, $clipEmo, $time")
queue.add(Triple(curEmo, curEmo, time + 1))
queue.add(Triple(curEmo + clipEmo, clipEmo, time + 1))
queue.add(Triple(curEmo - 1, clipEmo, time + 1))
}
}
728x90
'알고리즘(w.KOTLIN) > 그래프(bfs, dfs, 다익스트라)' 카테고리의 다른 글
[백준][코틀린][11725] 트리의 부모 찾기 (0) | 2023.02.27 |
---|---|
[백준][코틀린][1261] 알고스팟 (0) | 2023.02.22 |
[백준][코틀린][13549] 숨바꼭질3 (0) | 2023.02.20 |
[백준][코틀린][13913] 숨바꼭질4 (0) | 2023.02.20 |
[백준][코틀린][1697] 숨바꼭질 (0) | 2023.02.20 |