반응형
[Silver III] 1로 만들기 - 1463
성능 요약
메모리: 19404 KB, 시간: 88 ms
분류
다이나믹 프로그래밍
제출 일자
2024년 10월 10일 23:16:02
문제 설명
정수 X에 사용할 수 있는 연산은 다음과 같이 세 가지 이다.
- X가 3으로 나누어 떨어지면, 3으로 나눈다.
- X가 2로 나누어 떨어지면, 2로 나눈다.
- 1을 뺀다.
정수 N이 주어졌을 때, 위와 같은 연산 세 개를 적절히 사용해서 1을 만들려고 한다. 연산을 사용하는 횟수의 최솟값을 출력하시오.
입력
첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다.
출력
첫째 줄에 연산을 하는 횟수의 최솟값을 출력한다.
제출 코드
import java.io.*;
import java.util.Arrays;
public class Main {
static int[] arr;
static public int dp(int n){
int[] arr = new int[n+1];
for(int i = 2; i <= Math.min(3, n); i++){
arr[i] = 1;
}
for(int i = 4; i <= n; i++){
arr[i] = arr[i-1];
if(i%3 == 0){
arr[i] = Math.min(arr[i], arr[i/3]);
}
if(i%2== 0){
arr[i] = Math.min(arr[i], arr[i/2]);
}
arr[i] += 1;
}
return arr[n];
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
arr = new int[n+1];
System.out.print(dp(n));
}
}
728x90
반응형
'코딩 테스트 정복기 > 백준' 카테고리의 다른 글
[백준/Silver III] 1, 2, 3 더하기 - 9095 (0) | 2024.10.16 |
---|---|
[백준/Silver III] 피보나치 함수 - 1003 (0) | 2024.10.16 |
[백준/Silver V] 집합 - 11723 (1) | 2024.10.16 |
[백준/Silver I] 구간 합 구하기 5 - 11660 (1) | 2024.10.15 |
[백준/Silver II] DFS와 BFS - 1260 (0) | 2024.10.08 |