티스토리 뷰
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
* Created by kgh on 2018. 8. 18.
* Blog : http://kgh940525.tistory.com
* Github : http://github.com/kgh940525
시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
2 초 128 MB 49603 16098 10473 32.213%
문제
정수 X에 사용할 수 있는 연산은 다음과 같이 세 가지 이다.
X가 3으로 나누어 떨어지면, 3으로 나눈다.
X가 2로 나누어 떨어지면, 2로 나눈다.
1을 뺀다.
정수 N이 주어졌을 때, 위와 같은 연산 세 개를 적절히 사용해서 1을 만들려고 한다. 연산을 사용하는 횟수의 최솟값을 출력하시오.
입력
첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 자연수 N이 주어진다.
출력
첫째 줄에 연산을 하는 횟수의 최솟값을 출력한다.
예제 입력 1
2
예제 출력 1
1
예제 입력 2
10
예제 출력 2
3
힌트
10의 경우에 10 -> 9 -> 3 -> 1 로 3번 만에 만들 수 있다.
*/
public class Baekjoon_1463_Recursive {
public static int D[];
public static int make(int num){
// comment: num == 1 일경우 종료(조건만족)
if(num == 1){
return 0;
}
// comment: 0보다 큰수로 연산시키기 위한 조건
if(D[num]> 0){
return D[num];
}
// comment: 1) 1로 만들어 줄 경우 , -1
D[num] = make(num-1)+1 ;
// comment: 2) N/2 경우, D[N/2]+1
if(num%2==0){
int result = make(num/2)+1;
// comment: D[num]보다 num/2이 최소값일경우
if(D[num] > result){
D[num] = make(num/2)+1;
}
}
// comment: 3) N/3 경우 , D[N/3]+1
if(num%3==0){
int result = make(num/3)+1;
// comment: D[num]보다 num/3이 최소값일경우
if(D[num] > result) {
D[num] = make(num/3)+1;
}
}
// comment: return D[num]
return D[num];
}
public static void main(String args[]) throws IOException {
// comment: Variable Declear
int num = 0;
// comment: num Input
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
num = Integer.parseInt(br.readLine());
// comment: D Array num + 1 , 배열에 값 할당 안하면 기본적으로 0이 할당된다.
D = new int[num+1];
// comment: make call
System.out.print(make(num));
}
}
'Algorithm' 카테고리의 다른 글
[알고리즘] 11726번 백준알고리즘 1로 만들기 2*n타일 (0) | 2018.08.19 |
---|---|
[알고리즘] 1463번 백준알고리즘 1로 만들기(ButtomUp방식) - JAVA (0) | 2018.08.19 |
[알고리즘] 시간복잡도(Time Complexity)와 공간복잡도(Space Complexity) (0) | 2018.08.19 |
[알고리즘] 1937번 백준알고리즘 욕심쟁이 판다 (0) | 2018.08.13 |
[알고리즘] 2579번 백준알고리즘 계단오르기 (0) | 2018.08.13 |
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 알고리즘
- db
- 감자개발자
- node.js
- Android
- 개발하는 관광이
- BFS
- 텐서플로우
- Algorigm
- 초보자를 위한 C언어 300제
- 감자코딩
- 학교
- 프로그래밍
- MVC
- 머신러닝
- TensorFlow
- 안드로이드
- 리버싱
- programming
- 백준알고리즘
- 복습
- C langauge
- 스프링
- C언어
- Spring
- 백준
- node
- 코드엔진
- Controller
- 노드
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함