๋ฌธ์ : boj.kr/1463
๋ ์ง: 08/29 (๋ชฉ)
์ฑ๊ณต์ฌ๋ถ: O (00:37:07)
์ค๋ฒ3์ DP ๋ฌธ์ ์ด๋ค.
- x๊ฐ 3์ผ๋ก ๋๋์ด ๋จ์ด์ง๋ฉด 3์ผ๋ก ๋๋๋ค.
- x๊ฐ 2๋ก ๋๋์ด ๋จ์ด์ง๋ฉด 2๋ก ๋๋๋ค.
- 1์ ๋บ๋ค.
์ ์ x์ ๋ํด์ ์ ์ฉํ ์ ์๋ 3๊ฐ์ง ์ฐ์ฐ์ธ๋ฐ, ๋ญ๊ฐ ์ฐ์ฐ์ ์์๊ฐ ์๋ ๊ฒ์ฒ๋ผ ๋ณด์ฌ์ ์์๋ฅผ ์ง์ผ์ ํ๋ ค๊ณ ํ๋ฉด ํ๋ฆฐ๋ค. ์์ 3๊ฐ์ง ์ฐ์ฐ์ 3๊ฐ์ง ๊ฒฝ์ฐ์ ์์ด๊ณ ์ ์ x์ ๋ํด์ ๊ฐ๊ฐ ๋ชจ๋ ์ ์ฉ์์ผ์ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์ฐพ์์ ํธ๋ ๋ฌธ์ ์ด๋ค. ๋ผ๋ ์๊ฐ์ ๊ฐ์ง๊ณ ์ํ์ผ๋ก ํ ์ ์์๊น? ๋ผ๊ณ ์๊ฐํด๋ณด์์ผ ํ๋ค. ๊ทธ๋ผ ์๊ฐ ๋ณต์ก๋๋ 100๋ง๊ฐ์ ์ซ์์ ๋ํด์ 3๊ฐ์ ์ฐ์ฐ์ ํ๋ฏ๋ก 3^100์์ ์ ์ ์๋ค.
๊ทผ๋ฐ ๋ฌธ์ ์์ ์ฃผ์ด์ง ์๊ฐ์ด 0.15์ด์ด๋ฏ๋ก ๋ฌด์กฐ๊ฑด ์๊ฐ ์ด๊ณผ๊ฐ ๋ ๊ฒ์ด๋ค.. ๊ทธ๋ผ ์ด๋ป๊ฒ ํ์ด์ผํ ๊น? ๊ฒฐ๋ก ์ DP์ด๋ค. ์๋๋ฉด 3์ผ๋ก ๋๋๋ 2๋ก ๋๋๋ 1์ ๋นผ๋ ์ค๋ณต๋๋ ์ซ์๊ฐ ๋ฐ์์ ํ๋ค.
12 -> 4 -> 2 -> 1
12 -> 6 -> 2 -> 1
๊ฐ๋จํ ์์ ์ด๊ธด ํ๋ฐ, 12๋ฅผ 1๋ก ๋ง๋๋ 2๊ฐ์ง ๋ฐฉ๋ฒ์ ๋ณด๋ฉด ์ค๊ฐ์ 2๊ฐ ์ค๋ณต๋๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ์ด๋ DP์ ์ค๋ณต ๋ถ๋ถ ๋ฌธ์ ์กฐ๊ฑด์ ๋ถํฉํ๋ฉฐ DP ์์ฒด๊ฐ ์ํ์ ํ๋ ๊ฒ์ ๋ฉ๋ชจ์ด์ ์ด์ ๊ธฐ์ ์ ์ด์ฉํ ๊ธฐ๋ฒ์ด๋ฏ๋ก ์ด๋ฅผ ํ์ฉํด ์๊ฐ ๋ณต์ก๋๋ฅผ ๋ค์ ๊ณ์ฐํด๋ณด์.
์ผ๋จ ์๋ ๋ฌธ์ ์ ๋ํด์๋ O(1)์ด๋ค.
๊ทธ๋ฆฌ๊ณ ํด๋น ๋ฌธ์ ๋ 1์ด ๋๋ ์ต์ ์ฐ์ฐํ์๋ฅผ ๊ตฌํ๋๊ฑด๋ฐ ๋ง์ฝ ์ ๋ ฅ์ด 1์ด๋ฉด ์ฐ์ฐ์ ์ํด๋ ๋๋ฏ๋ก 0์ด ๋ต์ด๋๋ค. ๊ทธ๋ผ ์ฐ๋ฆฐ dp[1] = 0; ์ด๋ผ๋ ๋ต์ ์ด๋ฏธ ๊ฐ์ง๊ณ ์์ผ๋ ์ด๋ฅผ ์์์ผ๋ก 2๋ถํฐ n๊น์ง์ ๋ต์ ๊ตฌํ๊ธฐ๋ง ํ๋ฉด ๋๋ค. ์๋๋ฉด 1,2,3 ์ฐ์ฐ์ด ๋ชจ๋ 1~n ๋ฒ์ ๋ด ์ซ์๋ก๋ง ์ด๋ฃจ์ด์ง๊ธฐ ๋๋ฌธ์ 2๋ถํฐ n๊น์ง ์ฐจ๋ก๋๋ก ๋ฉ๋ชจ์ด์ ์ด์ ์ ์ด์ฉํด O(1)๋ก ์ ๊ทผํ์ฌ ๋ต์ ๊ตฌํ๋ฉด ๋๋ค. ๊ทธ๋ผ ์ด O(N)์ด๋ผ๋ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค. ์ฆ, 100๋ง์ ํด๊ฒฐ์ด ๊ฐ๋ฅํด์ก๋ค.
์ฝ๋
import java.io.*;
public class Main {
// ์๊ฐ์ ํ 0.15์ด, ๋ฉ๋ชจ๋ฆฌ์ ํ 128MB
static int[] dp;
static int n;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
dp = new int[1000001];
dp[1] = 0;
for (int i = 2; i <= n; i++) {
dp[i] = Integer.MAX_VALUE;
if (i % 3 == 0) dp[i] = Math.min(dp[i], dp[i/3] + 1);
if (i % 2 == 0) dp[i] = Math.min(dp[i], dp[i/2] + 1);
dp[i] = Math.min(dp[i], dp[i-1] + 1);
}
System.out.println(dp[n]);
}
}
'์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
1561 - ๋์ด ๊ณต์ (2) | 2024.09.09 |
---|---|
2156 - ํฌ๋์ฃผ ์์ (0) | 2024.08.30 |
[swea] 1859. ๋ฐฑ๋ง ์ฅ์ ํ๋ก์ ํธ (1) | 2024.08.28 |
2632 - ํผ์ํ๋งค (2) | 2024.08.25 |
17143 - ๋์์ (0) | 2024.08.24 |