Algorithm

[BOJ] 1463. 1로 만들기

프로그래민 2020. 7. 3. 13:45
반응형

DP로 푸는 문제이다.n

처음에 문제를 보았을 때, 재귀를 이용하여 접근하였다. 하지만 재귀를 시간초과가 발생하였다. 그래서 DP를 이용하여 풀어보았다. bottom-up 방식을 이용하여 1부터 N까지 갈수있도록 하였다. 이 과정은 시간복잡도가 n이므로 금방 구할수 있었다. 즉, dp[n]= min(dp[n/3], dp[n/2], dp[n-1]) +1 이라는 점화식을 이용하여 풀었다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package boj.base;
 
import java.io.BufferedReader;
import java.io.InputStreamReader;
 
public class Main_bj_1463_1로만들기 {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N=Integer.parseInt(br.readLine());
        
        if(N==1 || N==2) {
            System.out.println(N-1);
            return;
        }
        
        int[] dp= new int[N+1];
        
        dp[1]=0;
        dp[2]=1;
        dp[3]=1;
        
        for(int i=4;i<=N;i++) {
            if(i%3==0 && i%2==0) {
                dp[i]=Math.min(dp[i/3]+1, Math.min(dp[i/2]+1, dp[i-1]+1));
            }else if(i%3==0) {
                dp[i]=Math.min(dp[i/3]+1, dp[i-1]+1);
            }else if(i%2==0) {
                dp[i]=Math.min(dp[i/2]+1, dp[i-1]+1);
            }else {
                dp[i]=dp[i-1]+1;
            }
        }
        
        System.out.println(dp[N]);
        
    }
}
 
                                      
반응형

'Algorithm' 카테고리의 다른 글

[BOJ] 11052. 카드 구매하기  (0) 2020.07.03
[BOJ] 11727. 2xn 타일링2  (0) 2020.07.03
[BOJ] 1747. 소수&팰린드롬  (0) 2020.07.01
[BOJ] 17825. 주사위 윷놀이  (0) 2020.06.06
[BOJ] 13460. 구슬 탈출 2  (0) 2020.06.05