Skip to content

Commit 51f6014

Browse files
committed
[Silver III] Title: 1로 만들기, Time: 140 ms, Memory: 18752 KB -BaekjoonHub
1 parent 443793f commit 51f6014

2 files changed

Lines changed: 64 additions & 0 deletions

File tree

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import java.io.BufferedReader;
2+
import java.io.IOException;
3+
import java.io.InputStreamReader;
4+
import java.util.*;
5+
6+
public class Main {
7+
8+
public static void main(String[] args) throws IOException {
9+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
10+
int n = Integer.parseInt(br.readLine());
11+
int[] dp = new int[n + 1];
12+
for (int i = n - 1; i > 0; i--) {
13+
if (i * 2 <= n) {
14+
if (i * 3 <= n) {
15+
dp[i] = Math.min(dp[i + 1] + 1, dp[i * 2] + 1);
16+
dp[i] = Math.min(dp[i], dp[i * 3] + 1);
17+
} else {
18+
dp[i] = Math.min(dp[i + 1] + 1, dp[i * 2] + 1);
19+
}
20+
} else {
21+
dp[i] = dp[i + 1] + 1;
22+
}
23+
}
24+
25+
System.out.println(dp[1]);
26+
27+
}
28+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# [Silver III] 1로 만들기 - 1463
2+
3+
[문제 링크](https://www.acmicpc.net/problem/1463)
4+
5+
### 성능 요약
6+
7+
메모리: 18752 KB, 시간: 140 ms
8+
9+
### 분류
10+
11+
다이나믹 프로그래밍
12+
13+
### 제출 일자
14+
15+
2025년 11월 5일 11:41:51
16+
17+
### 문제 설명
18+
19+
<p>정수 X에 사용할 수 있는 연산은 다음과 같이 세 가지 이다.</p>
20+
21+
<ol>
22+
<li>X가 3으로 나누어 떨어지면, 3으로 나눈다.</li>
23+
<li>X가 2로 나누어 떨어지면, 2로 나눈다.</li>
24+
<li>1을 뺀다.</li>
25+
</ol>
26+
27+
<p>정수 N이 주어졌을 때, 위와 같은 연산 세 개를 적절히 사용해서 1을 만들려고 한다. 연산을 사용하는 횟수의 최솟값을 출력하시오.</p>
28+
29+
### 입력
30+
31+
<p>첫째 줄에 1보다 크거나 같고, 10<sup>6</sup>보다 작거나 같은 정수 N이 주어진다.</p>
32+
33+
### 출력
34+
35+
<p>첫째 줄에 연산을 하는 횟수의 최솟값을 출력한다.</p>
36+

0 commit comments

Comments
 (0)