- 난이도: Lv2
프로그래머스 링크: https://school.programmers.co.kr/learn/courses/30/lessons/154538
풀이 링크(GitHub): hayannn/CodingTest_Java/프로그래머스/2/154538. 숫자 변환하기
풀이 시간 : 1시간 10분
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++) {
// 변환할 수 없는 값이면 -1로 설정
if(i != x && dp[i] == 0) {
dp[i] = -1;
continue;
}
// x에 n을 더한 값
if(i + n <= y) {
if(dp[i + n] == 0) {
dp[i + n] = dp[i] + 1;
} else {
if(dp[i] + 1 < dp[i + n]) {
dp[i + n] = dp[i] + 1;
}
}
}
// x에 2를 곱한 값
if(i * 2 <= y) {
if(dp[i * 2] == 0) {
dp[i * 2] = dp[i] + 1;
} else {
if(dp[i] + 1 < dp[i * 2]) {
dp[i * 2] = dp[i] + 1;
}
}
}
// x에 3을 곱한 값
if(i * 3 <= y) {
if(dp[i * 3] == 0) {
dp[i * 3] = dp[i] + 1;
} else {
if(dp[i] + 1 < dp[i * 3]) {
dp[i * 3] = dp[i] + 1;
}
}
}
}
return dp[y];
}
}
//before
//after
풀이 시간 : 분(첫 풀이 시간 포함)
import java.math.*;
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++) {
// 변환할수 없는 값이면 -1;
if(i!=x && dp[i] == 0) {
dp[i] = -1;
continue;
}
// x에 n을 더한 값
if(i+n <= y) {
dp[i+n] = (dp[i+n] == 0) ? dp[i] + 1 : Math.min(dp[i] + 1, dp[i+n]);
}
// x에 2를 곱한 값
if(i*2 <= y) {
dp[i*2] = (dp[i*2] == 0) ? dp[i] + 1 : Math.min(dp[i] + 1, dp[i*2]);
}
// x에 3을 곱한 값
if(i*3 <= y) {
dp[i*3] = (dp[i*3] == 0) ? dp[i] + 1 : Math.min(dp[i] + 1, dp[i*3]);
}
}
return dp[y];
}
}