문제 - 숫자 변환하기
import java.util.*;
class Solution {
int answer;
public int solution(int x, int y, int n) {
answer = -1;
bfs(x,y,n);
return answer;
}
public void bfs(int start,int end, int n)
{
Queue <int []> q = new LinkedList<>();
q.offer(new int[]{start,0});
Set<Integer> visited = new HashSet<>();
visited.add(start);
while(!q.isEmpty())
{
int cnt[] = q.poll();
if(cnt[0] == end)
{
answer = cnt[1];
return;
}
if(cnt[0] + n <= end && !visited.contains(cnt[0] + n))
{
q.offer(new int []{cnt[0]+n,cnt[1]+1});
visited.add(cnt[0]+n);
}
if(cnt[0] * 2 <= end && !visited.contains(cnt[0] * 2))
{
q.offer(new int []{cnt[0] * 2,cnt[1]+1});
visited.add(cnt[0] * 2);
}
if(cnt[0] * 3 <= end && !visited.contains(cnt[0] * 3))
{
q.offer(new int []{cnt[0] * 3,cnt[1]+1});
visited.add(cnt[0] * 3);
}
}
}
}
import java.util.*;
class Solution {
public int solution(int x, int y, int n) {
int answer = 0;
int dp[] = new int[y+1];
for(int i = x ;i<=y;i++)
{
if(i != x && dp[i] ==0)
{
dp[i] = -1;
continue;
}
if(i+n <= y)
{
dp[i+n] = dp[i+n] ==0 ? dp[i]+1 : Math.min(dp[i+n],dp[i]+1);
}
if(i*2 <= y)
{
dp[i*2] = dp[i*2] ==0 ? dp[i]+1 : Math.min(dp[i*2],dp[i]+1);
}
if(i*3 <= y)
{
dp[i*3] = dp[i*3] ==0 ? dp[i]+1 : Math.min(dp[i*3],dp[i]+1);
}
}
return dp[y];
}
}