-
[1463] 1로 만들기 - Java알고리즘 연습 2022. 3. 8. 16:03
1. 문제
https://www.acmicpc.net/problem/1463
1463번: 1로 만들기
첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다.
www.acmicpc.net
2. 풀이
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws NumberFormatException, IOException { // 1. Read X BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int X = Integer.parseInt(br.readLine()); // 2. Calcualte minimum count int [] arr = new int[X + 1]; arr[1] = 0; for(int i = 2; i <= X; i++) { if (i % 6 == 0){ int compare = Math.min(arr[i/2], arr[i/3]); arr[i] = Math.min(compare, arr[i - 1]) + 1; } else if(i % 3 == 0) { arr[i] = Math.min(arr[i/3], arr[i - 1]) + 1; } else if(i % 2 == 0) { arr[i] = Math.min(arr[i/2], arr[i - 1]) + 1; } else { arr[i] = arr[i - 1] + 1; } } // 3. Print result System.out.println(arr[X]); } }
3. 배운점
- 3, 2 뿐만 아니라 6으로 나눠지는 경우(둘의 최소 공배수)도 고려해야 한다.
- 큰 수로 나누어 떨어진다고 해서 최솟값이라는 보장이 없다. 따라서 1을 빼주는 경우를 매 조건에서 검토해주어야 한다.
4. 개선할 점
풀이 오류 지적, 다른 접근법 공유, 그 밖에 질문 등 모든 의견을 환영합니다.
'알고리즘 연습' 카테고리의 다른 글
[11052] 카드 구매하기 - Java (0) 2022.03.14 [9095] 1,2,3 더하기 - Java (0) 2022.03.09 [17087] 숨바꼭질-6 -Java (0) 2022.02.23 [9613] GCD 합 - Java (0) 2022.02.23 [1874] 스택 수열 - Java (0) 2022.02.22