반응형
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public void solution() throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int dp[] = new int[n+1];
dp[0] = 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]);
}
public static void main(String args[]) throws IOException {
new Main().solution();
}
}
dp에 연산에 필요한 횟수를 저장한다. for문으로 bottom-up 방식을 사용한다.
1을 연산하는데 필요한 횟수는 0이다. dp[1]에는 0을 저장한다.
2를 연산하는데 필요한 횟수는 1이며. dp[2]에는 1을 저장한다.
3를 연산하는데 필요한 횟수는 1이며, dp[3]에는 1을 저장한다.
만약 4를 연산하는 경우에 필요한 횟수를 구하는 방법은
4를 -1 했을 경우 / dp[4] = dp[4-1] +1
4를 2로 나누었을 경우 / dp[2] (2를 구하는 연산횟수) + 1 (현재 행하는 연산횟수 1 추가)
중에 작은 횟수를 저장 하는 방식으로
정수 n까지 bottom-up해서 dp에 저장해나간후 원하는 정수 n의 연산 횟수를 출력하면 된다.
반응형
'개발 > 알고리즘' 카테고리의 다른 글
백준 11727번 : 2xn 타일링 2 (0) | 2023.01.27 |
---|---|
백준 11726번 : 2xn 타일링 (0) | 2023.01.27 |
백준 1182번 : 부분수열의 합 (0) | 2023.01.26 |
백준 11723번 : 집합 (0) | 2023.01.25 |
백준 문제풀이 입력과 출력 (0) | 2023.01.22 |