반응형
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 |