https://www.acmicpc.net/problem/1463
import java.util.*;
import java.io.*;
public class Main {
static BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
static BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
static StringBuilder sb=new StringBuilder();
public static void main(String args[]) throws Exception {
int n=Integer.parseInt(br.readLine());
int[] num=new int[n+1];
num[0]=0;
num[1]=0;
for(int i=2;i<=n;i++) {
num[i]=num[i-1]+1;
if(i%2==0) num[i]=Math.min(num[i], num[i/2]+1);
if(i%3==0) num[i]=Math.min(num[i], num[i/3]+1);
}
System.out.println(num[n]);
}
}
이 문제는 궁극적으로 연산의 횟수를 카운트하는 문제입니다.
그렇기 때문에 n번째 연산은 n-1번째 연산+1이라는 접근으로 문제를 풀 수 있습니다.
저는 num이라는 정수 배열에 숫자들을 저장했는데요,
for문에서 1, 2, 3번 연산을 했을 때 가장 최솟값을 출력하는 n-1번째 연산을 선택해 n번째 연산은 n-1번째 연산+1으로 하는 식으로 문제를 풀어보았습니다.
'프로그래밍 문제 > BOJ(백준 온라인 저지)' 카테고리의 다른 글
[BOJ 2565번] 전깃줄(JAVA) (0) | 2020.08.05 |
---|---|
[BOJ 11053번] 가장 긴 증가하는 부분 수열(JAVA) (0) | 2020.08.05 |
[BOJ 9461번] 파도반 수열(JAVA) (0) | 2020.08.04 |
[BOJ 1904번] 01 타일(JAVA) (0) | 2020.08.02 |
[BOJ 2748번] 피보나치 수 2(JAVA) (0) | 2020.08.02 |