https://www.acmicpc.net/problem/31804
ํ์ด
์ฒ์์๋ ๊ทธ๋ฆฌ๋ ๋ฌธ์ ๊ฐ? ํ๋๋ฐ ๊ทธ๊ฑด ์๋์๊ณ dp ๋ฌธ์ ์๋ค.
์ฐฌ์ค๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ์ ์ฌ์ฉํ์ง ์์ ๊ฒฝ์ฐ ๋๋ก ๋๋ ์ dp ๋ฐฐ์ด์ ์ฑ์์ฃผ๋ฉด ๋๋ค.
i = ์ ์
dp[i][0] = ์ฐฌ์ค๋ฅผ ์์ง ์ฌ์ฉํ์ง ์์์ ๋
dp[i][1] = ์ฐฌ์ค๋ฅผ ์ด๋ฏธ ์ฌ์ฉํ์ ๋
dp[i][0]์ ์ฑ์ฐ๊ธฐ ์ํด์๋ dp[i - 1][0], dp[i / 2][0]์ ๊ฐ์ ์ดํด๋ณด๊ณ
dp[i][1]์ ์ฑ์ฐ๊ธฐ ์ํด์๋ dp[i - 1][1], dp[i / 2][1], dp[i / 10][0]์ ๊ฐ์ ์ดํด๋ณธ๋ค.
์ฃผ์ํ ์ ์ i๊ฐ 2์ ๋ฐฐ์์ธ์ง๋ ํ์ธํด์ผ ํ๋ค.
์ฝ๋
๋๋ณด๊ธฐ
import java.io.*;
import java.util.*;
public class Main {
private static final int INF = 1000005;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
int[][] dp = new int[b + 1][2];
for (int i = 0; i <= b; i++) {
dp[i][0] = INF; // chance ์ ์
dp[i][1] = INF; // chance ์
}
dp[a][0] = 0;
for (int i = a + 1; i <= b; i++) {
if (i % 2 == 0) {
dp[i][0] = Math.min(dp[i - 1][0] + 1, dp[i / 2][0] + 1);
dp[i][1] = Math.min(dp[i - 1][1] + 1, dp[i / 2][1] + 1);
if (i % 10 == 0) {
dp[i][1] = Math.min(dp[i][1], dp[i / 10][0] + 1);
}
} else {
dp[i][0] = dp[i - 1][0] + 1;
dp[i][1] = dp[i - 1][1] + 1;
}
}
System.out.println(Math.min(dp[b][0], dp[b][1]));
br.close();
}
}
ํ ์คํธ ์ผ์ด์ค
๋๋ณด๊ธฐ
// case 1:
1 12
ans: 3
// case 2:
1 1
ans: 0
// case 3:
2 30
ans: 2
'Problem Solving' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] ๋ฐฑ์ค 31792 - ํ๋น๋ฏธ๋์ด (Hard) (0) | 2024.05.10 |
---|---|
[Java] ๋ฐฑ์ค 2411 - ์์ดํ ๋จน๊ธฐ (0) | 2024.04.12 |
[Java] ๋ฐฑ์ค 31716 - ํ๋๋ชจ๋น์ค ์์จ ์ฃผํ ํ ์คํ 1 (0) | 2024.04.10 |
[Java] ๋ฐฑ์ค 1707 - ์ด๋ถ ๊ทธ๋ํ (0) | 2024.04.09 |
[Java] ๋ฐฑ์ค 16724 - ํผ๋ฆฌ ๋ถ๋ ์ฌ๋์ด (0) | 2024.03.28 |