반응형
[Baekjoon][https://www.acmicpc.net/problem/1463]
다이나믹 프로그래밍(DP) > Bottom-up 형식
풀이)
(1) d[n] : 1 ~ N 일때 1로 만들기 위한 최소 개수를 저장.
(2) 가장 작은 단위인 dp[1] = 0 으로 초기화 하여, dp[2] 부터 For문 처리 (Bottom-up) 형식
(3) Math.min() 함수로 메모이제이션 해두었던 값과 현재 값의 최소값을 비교하여,
연산을 사용하는 횟수의 최솟값을 구한다.
import java.util.Scanner;
public class baekjoon_1463 {
static int[] dp;
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
dp = new int[1000001];
dp[1] = 0;
for(int i=2;i<=n;i++) {
dp[i] = dp[i-1] + 1;
if(i%2 == 0) {
dp[i] = Math.min(dp[i], dp[i/2]+1);
}
if(i%3 == 0) {
dp[i] = Math.min(dp[i], dp[i/3]+1);
}
}
System.out.println(dp[n]);
}
}
반응형
'알고리즘 > Baekjoon' 카테고리의 다른 글
[ Baekjoon ] #11724 연결 요소의 개수 (0) | 2020.04.18 |
---|---|
[ Baekjoon ] #2668 숫자 고르기 (0) | 2020.04.18 |
[ Baekjoon ] #10026 적록색약 (0) | 2020.02.22 |
[ Baekjoon ] #2667 단지 번호 붙이기 (0) | 2020.02.16 |
[ Baekjoon ] #2583 영역 구하기 (2) | 2020.02.13 |