언어 : Kotlin
x를 y로 변환하기 위해 필요한 최소 연산 횟수를 return하도록 solution 함수를 완성해주세요.
라는 문제다 최소 연산 횟수니까 bfs 를 선택하는게 맞았지만
처음에는 dfs 로 풀면 풀릴거 같은데? 라고 생각하고 풀었다.결과는 시간초과 나는 케이스가 있어서 실패.아래는 bfs 풀이다.내용 자체는 단순해서 bfs에 대해서 이해하고 있다면 풀이가 어렵진 않다.
import java.util.LinkedList
import java.util.Queue
lateinit var answer: ArrayList<Int>
lateinit var queue: Queue<Pair<Int, Int>>
lateinit var visited: HashMap<Int, Boolean>
class Solution {
fun solution(x: Int, y: Int, n: Int): Int {
answer = arrayListOf()
queue = LinkedList()
visited = hashMapOf()
bfs(x, y, n, 0)
return if (answer.isEmpty()) -1 else answer.first()
}
fun bfs(x: Int, y: Int, n: Int, depth: Int) {
queue.add(Pair(x, depth))
while (queue.isNotEmpty()) {
val node = queue.poll()
if (node.first > y) continue
if (node.first == y) {
answer.add(node.second)
break
}
if (visited[node.first + n] != true) {
queue.add(Pair(node.first + n, node.second + 1))
visited[node.first + n] = true
}
if (visited[node.first * 2] != true) {
queue.add(Pair(node.first * 2, node.second + 1))
visited[node.first * 2] = true
}
if (visited[node.first * 3] != true) {
queue.add(Pair(node.first * 3, node.second + 1))
visited[node.first * 3] = true
}
}
}
}
반응형
'알고리즘' 카테고리의 다른 글
프로그래머스 - 귤고르기 (0) | 2024.08.18 |
---|---|
프로그래머스 - 명예의 전당(1) (0) | 2024.08.18 |
프로그래머스 - 문자열 나누기 (0) | 2024.08.17 |
프로그래머스 - 크기가 작은 부분 문자열 (0) | 2024.08.14 |
프로그래머스 - 둘만의 암호 (0) | 2024.08.13 |
프로그래머스 - 무인도 여행 (0) | 2024.08.13 |
프로그래머스 - 미로탈출 (0) | 2024.08.12 |
프로그래머스 - 카드뭉치 (0) | 2024.08.12 |