๋ฐ์ํ
https://www.acmicpc.net/problem/1463
โ๏ธ ๋ฌธ์
๐ ๋ฌธ์ ํด๊ฒฐ
๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ์ ์๋ ์ธ๊ฐ์ง ์์๋ฅผ ๋ฐ๋ผ์ ๋ฌธ์ ๋ฅผ ํ์ดํฉ๋๋ค.
- ํ ์ด๋ธ ์ ์ํ๊ธฐ
- ์ ํ์ ์ฐพ๊ธฐ
- ์ด๊ธฐ๊ฐ ์ค์
1. ํ ์ด๋ธ ์ ์ํ๊ธฐ
ํ ์ด๋ธ์ ๊ฐ์ ๋น์ฐํ i์ ์ต์ ์ฐ์ฐ ํ์๊ฐ ๋๊ฒ ์ต๋๋ค.
2. ์ ํ์ ์ฐพ๊ธฐ
i๋ฅผ ๊ณ์ฐํ๋ ๋ฐฉ๋ฒ์ ์ด 3๊ฐ์ง๊ฐ ์์ต๋๋ค.
- 2๋ก ๋๋ ๋๋จธ์ง๊ฐ 0์ผ ๊ฒฝ์ฐ, 2๋ก ๋๋๋ค.
- 3์ผ๋ก ๋๋ ๋๋จธ์ง๊ฐ 0์ผ ๊ฒฝ์ฐ, 3์ผ๋ก ๋๋๋ค.
- 1์ ๋บ๋ค.
i์ ์ต์ ์ฐ์ฐ ํ์๋ฅผ ์ ์ฅํ๋ ๋ฐฐ์ด์ dp๋ผ๊ณ ์ ์ํ ๋, dp[i]์ ๊ฐ์ ์๋์ ๊ฐ์ต๋๋ค.
dp[i] = Math.min(dp[i-1] + 1, dp[i/2] + 1, dp[i/3] + 1);
3. ์ด๊ธฐ๊ฐ ์ค์
์ด๊ธฐ๊ฐ์ 1๋ถํฐ N๊น์ง์ ์ฐ์ฐ์ ์งํํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์๋์ ๊ฐ์ด ์ค์ ํฉ๋๋ค.
dp[1] = 0;
๐ ์ ์ฒด ์ฝ๋
import java.util.Scanner;
import java.lang.Math;
public class Main {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int[] dp = new int[N+1];
dp[1] = 0;
for(int i=2; i<= N; i++) {
dp[i] = dp[i-1] + 1;
if(i % 2 == 0){
dp[i] = Math.min(dp[i], dp[i/2] + 1);
}
if(i % 3 == 0) {
dp[i] = Math.min(dp[i], dp[i/3] + 1);
}
}
System.out.print(dp[N]);
}
}
๋ฐ์ํ