파게로그
[백준 1463번] 1로 만들기 본문
문제 링크: 1463번 1로 만들기
https://www.acmicpc.net/problem/1463
예를들어, 9는 '27을 3으로 나눈다'는 한 번의 수행 또는 '10에서 1을 뺀다'는 한 번의 수행을 통해 만들어진다. 이를 통해 점화식을 세우면 다음과 같다.
a[n] = min(a[n/3], a[n/2], a[n-1]) + 1
다만 a[n/3]
과 a[n/2]
는 나누어떨어지지 않는 경우 구할 수 없기에 divBy3
, divBy2
를 미리 선언하여 i가 3 또는 2로 나누어떨어지지 않을 경우 최댓값을 저장하도록 하여 min()에서 고려되지 않도록 한다.
import java.util.Scanner;
import java.util.Arrays;
class Main {
static int[] arr;
public static int min(int a, int b, int c) {
int[] temp = {a, b, c};
Arrays.sort(temp);
return temp[0];
}
public static int min(int a, int b) {
if (a <= b) return a;
return b;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
arr = new int[n+3];
arr[2] = arr[3] = 1;
for (int i = 4; i <= n; i++) {
int divBy3 = i%3==0 ? arr[i/3] : Integer.MAX_VALUE;
int divBy2 = i%2==0 ? arr[i/2] : Integer.MAX_VALUE;
arr[i] = min(divBy3, divBy2, arr[i-1]) + 1;
}
int answer = arr[n];
System.out.println(answer);
sc.close();
}
}
'콤퓨타 왕왕기초 > PS' 카테고리의 다른 글
[프로그래머스 Lv.2] 기능개발 (0) | 2020.12.03 |
---|---|
[백준 10844번] 쉬운 계단 수 (0) | 2020.12.01 |
[백준 2579번] 계단 오르기 (0) | 2020.12.01 |
[백준 1932번] 정수 삼각형 (0) | 2020.12.01 |
[백준 1149번] RGB거리 (0) | 2020.12.01 |
Comments