![[Lv. 2] 숫자 변환하기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fr80iL%2FbtsoIMRzDpe%2FL7jk1maaITxYllzakAcllk%2Fimg.png)

문제 출처 : https://school.programmers.co.kr/learn/courses/30/lessons/154538
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
난이도 : Level.2
언어 : Kotlin
문제 설명 :
자연수 x를 y로 변환하려고 합니다. 사용할 수 있는 연산은 다음과 같습니다.
- x에 n을 더합니다
- x에 2를 곱합니다.
- x에 3을 곱합니다.
자연수 x, y, n이 매개변수로 주어질 때, x를 y로 변환하기 위해 필요한 최소 연산 횟수를 return하도록 solution 함수를 완성해주세요. 이때 x를 y로 만들 수 없다면 -1을 return 해주세요.
제한 사항 :
- 1 ≤ x ≤ y ≤ 1,000,000
- 1 ≤ n < y
입출력 예 :
x | y | n | result |
10 | 40 | 5 | 2 |
10 | 40 | 30 | 1 |
2 | 5 | 4 | -1 |
다른 사람의 풀이 :
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
}
}
}
}
DFS/BFS 이 쪽에 내가 많이 약하다는 것을 느꼈다.
알고리즘쪽으로 전반적으로 약한게 아닐까 싶어 그쪽 공부를 좀 더 보충하는게 좋겠다는 생각이 든다.
다음은 DFS, BFS에 대한 전반적인 설명 및 자세한 풀이가 첨부된 링크다.
https://dev-musa.tistory.com/entry/DFS-BFS-Kotlin
DFS & BFS ( Kotlin )
DFS ( Depth First Search ) 깊이 우선 탐색 / BFS( Breadth First Search ) 너비 우선 탐색 DFS와 BFS는 그래프의 전체를 탐색하는 완전 탐색 알고리즘의 기법 중 하나입니다. 아래에 애니메이션이 있습니다. 그림
dev-musa.tistory.com
[프로그래머스 Lv.2] 숫자 변환하기 (Kotlin)
문제 링크처음엔 다음과 같이 dfs로 접근하여 풀려고 했다.그러나 자꾸 시간초과가 났다.그림을 그려보니 당연한 결과였다.조건을 만족하는 depth가 최소일 때, 반복문을 빠져나오면 되는데,dfs 알
velog.io
'프로그래머스 > Level 2' 카테고리의 다른 글
[Lv. 2] 소수 찾기 (0) | 2023.07.25 |
---|---|
[Lv. 2] 롤케이크 자르기 (0) | 2023.07.24 |
[Lv. 2] 뒤에 있는 큰 수 찾기 (0) | 2023.07.24 |
[Lv. 2] 모음 사전 (0) | 2023.07.21 |
[Lv. 2] 오픈채팅방 (0) | 2023.07.21 |

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!