반응형
[알고리즘][DP][1463] 1로 만들기
https://www.acmicpc.net/problem/1463
[풀이]
- 본격적인 DP문제
- 처음 풀어서 쉽지 않았다.
- 최소값을 고려해야만 문제를 풀 수 있다. (이것 때문에 굉장히 머리 아팠다)
- 10 = 9 -> 3 -> 1 (3회) 가 10 = 5 -> 4 -> 2 -> 1 (4회) 보다 효율적이다.
- EX > num=10 일 때,
- d[10] = DP(9)+1 => DP(3)+1 +1 => DP(1)+1 +1 +1
- temp = DP(5)+1 => DP(4)+1 +1 => DP(2)+1 +1 +1 => DP(1) +1 +1 +1 +1
- temp 가 작을 경우 d[10]에 temp를 넣어준다.
- 이런 식으로 최소값을 얻는다.
[코드]
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 39 40 | package algorithm_basic; import java.util.Scanner; public class q_1463 { public static int[] d; public static void main(String[] args) { Scanner scan = new Scanner(System.in); int num = scan.nextInt(); d = new int[num+1]; System.out.println(DP(num)); } public static int DP(int num) { if(num==1) { return 0; } if(d[num]>0) { return d[num]; } d[num] = DP(num-1)+1; if(num%2 == 0) { int tmp = DP(num/2)+1; if (d[num] > tmp) { d[num] = tmp; } } if(num%3 == 0) { int tmp = DP(num/3)+1; if (d[num] >tmp) { d[num] = tmp; } } return d[num]; } } | cs |
- 쉽지 않지만 다시 풀어보고 숙지하기!
- 어려워도 포기하지 않고 계속 풀자!
반응형
'CS > Algorithm' 카테고리의 다른 글
[알고리즘][DP][9095] 1, 2, 3 더하기 (0) | 2018.03.22 |
---|---|
[알고리즘][DP][11726] 2×n 타일링 (0) | 2018.03.21 |
[알고리즘] 11656 접미사배열 (0) | 2018.03.19 |
[알고리즘] 11655 ROT13 (0) | 2018.03.19 |
[알고리즘] 단어 길이 재기 - 시간복잡도 (0) | 2018.03.18 |
댓글