Study/Problem Solving

[PROGRAMMERS] 숫자 변환하기

monitor 2023. 5. 1. 18:19

해당 숫자까지 도달을 하기 위해서 최소한의 연산으로 얼마만에 가는지를 구하는 것이 문제이다.

 

dp를 이용해서 최소한의 움직임을 계산하기 위해서 Math.min 함수를 사용해서 얼마 안 움직인 것을 캐치하고, y 값 위치 전까지 카운팅을 진행하는 코드이다.

 

import java.util.*;
class Solution {
    public int solution(int x, int y, int n) {
        
        int answer = 0;
        
        int dp[] = new int[1_000_001];
        
        Arrays.fill(dp, -1);
        
        dp[x] = 0;
        
        for(int i = x; i <= y; i++){
            
            if(dp[i] != -1){
                if(i + n <= y){
                    if(dp[i + n] == -1){
                        dp[i + n] = dp[i] + 1;    
                    }else{
                        dp[i + n] = Math.min(dp[i + n] , dp[i] + 1);
                    }
                }
                
                if(i * 2 <= y){
                    if(dp[i * 2] == -1){
                        dp[i * 2] = dp[i] + 1;    
                    }else{
                        dp[i * 2] = Math.min(dp[i * 2] , dp[i] + 1);
                    }
                }
                
                if(i * 3 <= y){
                    if(dp[i * 3] == -1){
                        dp[i * 3] = dp[i] + 1;    
                    }else{
                        dp[i * 3] = Math.min(dp[i * 3] , dp[i] + 1);
                    }
                }
            }
        }
        answer = dp[y];
        return answer;
    }
}