프로그래밍 문제/BOJ(백준 온라인 저지)
[BOJ 1463번] 1로 만들기(JAVA)
테크케찰
2020. 8. 4. 12:39
https://www.acmicpc.net/problem/1463
1463번: 1로 만들기
첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다.
www.acmicpc.net
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으로 하는 식으로 문제를 풀어보았습니다.