Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

전공공부

[PROGRAMMERS] 숫자 변환하기 본문

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;
    }
}

'Study > Problem Solving' 카테고리의 다른 글

[BOJ 5073] 삼각형과 세 변  (0) 2023.07.23
[BOJ 23971] ZOAC4  (0) 2023.07.22
[PROGRAMMERS] 요격 시스템  (0) 2023.04.30
[PROGRAMMERS]연속된 부분 수열의 합  (0) 2023.04.14
[BOJ 13458] 시험 감독  (0) 2023.03.30