전공공부
[PROGRAMMERS] 숫자 변환하기 본문
해당 숫자까지 도달을 하기 위해서 최소한의 연산으로 얼마만에 가는지를 구하는 것이 문제이다.
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 |