https://www.acmicpc.net/problem/1463
소스코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.Math;
public class Sanizzang {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int[] arr = new int[N + 1];
arr[0] = 0;
arr[1] = 0;
for (int i = 2; i < N + 1; i++) {
arr[i] = arr[i - 1] + 1;
if (i % 3 == 0)
arr[i] = Math.min(arr[i], arr[i / 3] + 1);
if (i % 2 == 0)
arr[i] = Math.min(arr[i], arr[i / 2] + 1);
}
System.out.println(arr[N]);
br.close();
}
}
소스설명
1. 입력한 N의 +1만큼의 배열을 만든다.
2. 배열의 n번째 방을 가기위한 최소값을 구하기 위해 먼저 n번째 방의 -1칸일때의 연산횟수를 arr[i]에 대입하고
3. n번째 방의 1/3, 1/2일때의 연산횟수 중 최솟값을 arr[i]에 대입한다.
4. 그러면 입력한 N번째 배열에 도달했을 때 N번까지의 최소 연산횟수가 저장되있다.
'Algorithm(Java) > BAEKJOON' 카테고리의 다른 글
[JAVA] 백준 알고리즘 1449번 문제 풀이 (수리공 환승) (0) | 2021.09.25 |
---|---|
[JAVA] 백준 알고리즘 4796번 문제 풀이 (캠핑) (0) | 2021.09.25 |
[JAVA] 백준 알고리즘 2294번 문제 풀이 (동전2) (0) | 2021.09.25 |
[JAVA] 백준 알고리즘 2231번 문제 풀이 (분해합) (0) | 2021.09.24 |
[JAVA] 백준 알고리즘 2309번 문제풀이 (일곱 난쟁이) (0) | 2021.09.23 |