NOTE/BAEKJOON
1463 1로 만들기
m-inz
2022. 3. 19. 00:08
import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
public class main {
static int N;
static int answer=Integer.MAX_VALUE;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
N = Integer.parseInt(br.readLine());
dp(N,0);
bw.write(answer+" ");
bw.flush();
bw.close();
}
static void dp(int n, int count) {
if(n==1) {
answer = Math.min(answer,count);
return;
}
if(count >= answer) return;
if(n%3==0) {
dp(n/3,count+1);
}
if(n%2==0) {
dp(n/2,count+1);
}
dp(n-1,count+1);
}
}
제일 먼저 떠오른게 함수만들어서 재귀로 count 1씩 증가시키면서 넘겨주는 거 였는데
오래걸릴 거라고 생각했다 힝
count가 answer 보다 크면 return 하는 이유는
count의 최대의 경우는 n-1 이기 때문 ~ 즉,,하나도 나누지 않고 1씩 다빼주는 경우