![프로그래머스 - 숫자 변환하기 Java 풀이 1 프로그래머스 - 숫자 변환하기 Java 풀이](https://i0.wp.com/allhoneytip.com/wp-content/uploads/2024/02/image-76-optimized.png?resize=688%2C284&ssl=1)
프로그래머스 숫자 변환하기 Java 풀이에 대해 알아보겠습니다.
프로그래머스 – 숫자 변환하기 경로
문제 설명 및 제한사항
문제 설명
자연수 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 |
입출력 예 설명
입출력 예 #1x
에 2를 2번 곱하면 40이 되고 이때가 최소 횟수입니다.
입출력 예 #2x
에 n
인 30을 1번 더하면 40이 되고 이때가 최소 횟수입니다.
입출력 예 #3x
를 y
로 변환할 수 없기 때문에 -1을 return합니다.
숫자 변환하기 Java 풀이
사실 이 문제는 BFS랑 DP 두 알고리즘 모두의 성격을 띄고 있다고 생각하지만, 배열 이름은 편의상 dp로 하겠습니다 🙂
주석을 읽어보시면 이해가 되실거에요~!
![프로그래머스 - 숫자 변환하기 Java 풀이 2 동적 계획법(DP)과 BFS의 차이점동적 계획법(DP): 큰 문제를 작은 문제로 나누어 해결하고, 그 결과를 저장해 두었다가 재사용하는 방식입니다. 일반적으로, 반복문 또는 재귀 호출을 사용하여 구현됩니다. 문제의 중복 계산을 피하기 위해 메모이제이션(memoization) 또는 타뷸레이션(tabulation) 기법을 사용합니다.너비 우선 탐색(BFS): 그래프 또는 트리에서 노드를 너비를 우선으로 탐색하는 알고리즘입니다. BFS는 주로 최단 경로를 찾거나, 그래프의 레벨별 탐색을 수행할 때 사용됩니다. 큐(Queue)를 사용하여 구현되며, 각 노드를 순차적으로 방문하고 모든 이웃 노드를 큐에 추가하는 과정을 반복합니다.](https://i0.wp.com/allhoneytip.com/wp-content/uploads/2024/02/image-78-optimized.png?resize=685%2C303&ssl=1)
class Solution { public int solution(int x, int y, int n) { //우선 탐색이 필요한 최댓값은 y이기 때문에, 인덱싱 편의상 y + 1 만큼의 배열을 만들어줍니다. int[] dp = new int[y + 1]; dp[x] = 1; // 시작점 초기화 (마지막에 뺄 예정) for(int i = x; i <= y; i++) { // 방문한 이력이 없으면 무시하고 다음 위치로 넘어갑니다. if(dp[i] == 0) continue; // 아래 공통 규칙을 고수합니다. // 목적지가 y 값 이하여야 합니다. // 이동하려는 위치의 값(이동 카운트)이 0이거나, 현재 이동 카운트 + 1 보다 클때만 // 현재 이동 카운트 + 1을 해줍니다. if(i + n <= y && (dp[i + n] == 0 || dp[i + n] > dp[i] + 1)) dp[i + n] = dp[i] + 1; if(i * 2 <= y && (dp[i * 2] == 0 || dp[i * 2] > dp[i] + 1)) dp[i * 2] = dp[i] + 1; if(i * 3 <= y && (dp[i * 3] == 0 || dp[i * 3] > dp[i] + 1)) dp[i * 3] = dp[i] + 1; } return dp[y] == 0 ? -1 : dp[y] - 1; // 초기화 해줬던 1 제외 } }
결과
![프로그래머스 - 숫자 변환하기 Java 풀이 3 image 75](https://i0.wp.com/allhoneytip.com/wp-content/uploads/2024/02/image-75-optimized.png?resize=378%2C571&ssl=1)
답글 남기기