백준[baekjoon]/JAVA
백준(baekjoon) [JAVA] - 1463번: 1로 만들기
_KTH_
2023. 8. 2. 20:28
728x90
https://www.acmicpc.net/problem/1463
1463번: 1로 만들기
첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다.
www.acmicpc.net
import java.io.*;
// 1로 만들기
public class _1463 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int x = Integer.parseInt(br.readLine());
int[] arr = new int[x + 1];
for (int i = 2; i <= x; i++) {
arr[i] = arr[i - 1] + 1;
if (i % 2 == 0) {
arr[i] = Math.min(arr[i / 2] + 1, arr[i]);
}
if (i % 3 == 0) {
arr[i] = Math.min(arr[i / 3] + 1, arr[i]);
}
}
bw.write(arr[x] + "");
bw.flush();
bw.close();
}
}
MEMO
-- 10과 같은 여러 가지의 경우가 생길 때 어떻게 처리해야할지 잘 생각해야함
-- 10은 처음에 2로 나누고 시작하는 방법, 1을 빼고 9의 경우에서 시작하는 방법이 존재
-- 이러한 경우 어떤 방법이 연산을 최소화 할지 알기 힘듬
-- 따라서 Math.min()을 통해서 둘의 방식을 모두 연산 후 작은 값을 고르도록 함
!! 동적 프로그래밍 적용이 가능한 문제 특징 잘 파악하기 !!
728x90
728x90