์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- ํ๋ฌํฐ ๊ฐ๋ฐํ๊ฒฝ ์ค์
- C
- ํ์ ๋ถ๊ธฐ
- php ํ๋ก๊ทธ๋๋ฐ ์ ๋ฌธ ์ฐ์ต๋ฌธ์
- php ํ๋ก๊ทธ๋๋ฐ ์ ๋ฌธ 3ํ
- ๋ฐฐ์ด
- ์๋ฐ
- Java
- ์คํ๋ง
- ํ๋ฌํฐ
- Flutter
- ๋ฐฑ์ค
- ํ์ด์ฝ ์น๊ตฌ์ฝ๋
- JAVA SPRING
- php ํ๋ก๊ทธ๋๋ฐ ์ ๋ฌธ ์๋ฃจ์
- php ํ๋ก๊ทธ๋๋ฐ ์ ๋ฌธ ๋ฌธ์ ํ์ด
- php
- ํ์ด์ฝ ์ถ์ฒ์ธ
- php ํ๋ก๊ทธ๋๋ฐ ์ ๋ฌธ ์์
- php ํ๋ก๊ทธ๋๋ฐ
- ์ต๋จ ๊ฒฝ๋ก
- ํ์ด์ฝ ์ถ์ฒ์ธ์ฝ๋
- C์ธ์ด
- ํ์ด์ฌ
- ์๋ฐ ์คํ๋ง
- spring
- programmers
- SWEA
- ํ์ด์ฝ ์ด๋์ฝ๋
- php ํ๋ก๊ทธ๋๋ฐ ์ ๋ฌธ
- Today
- Total
ImJay
[BOJ/Java] 11049. ํ๋ ฌ ๊ณฑ์ ์์ ๋ณธ๋ฌธ
๐ [BOJ/Java] 11049. ํ๋ ฌ ๊ณฑ์ ์์
๐ ๋ฌธ์ ๋งํฌ: ๋ฐฑ์ค 11049๋ฒ - ํ๋ ฌ ๊ณฑ์ ์์
๐ ๋ฌธ์ ํด์
๐ N๊ฐ์ ํ๋ ฌ์ด ์ฃผ์ด์ง ๋, ๋ชจ๋ ํ๋ ฌ์ ๊ณฑํ๋ ์ต์ ์ฐ์ฐ ํ์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ค.
๐ฐ ํ๋ ฌ ๊ณฑ์
์ฐ์ฐ ํ์๋ A(p×q) × B(q×r) = p × q × r๋ก ๊ณ์ฐ๋๋ค.
๐ ๏ธ ํ๋ ฌ์ ๊ณฑํ๋ ์์์ ๋ฐ๋ผ ์ฐ์ฐ ํ์๊ฐ ๋ฌ๋ผ์ง๋ฏ๋ก ์ต์ ์ ๊ณฑ์
์์๋ฅผ ์ฐพ์์ผ ํ๋ค.
๐ฏ ํต์ฌ ๊ฐ๋
- dp[i][j] = i๋ฒ์งธ ํ๋ ฌ๋ถํฐ j๋ฒ์งธ ํ๋ ฌ๊น์ง ๊ณฑํ๋ ์ต์ ์ฐ์ฐ ํ์
- dp[i][j] = min(dp[i][k] + dp[k+1][j] + cost(A[i] ~ A[k], A[k+1] ~ A[j]))
(i๋ถํฐ j๊น์ง ๊ณฑํ๋ ์ต์ ์ k๋ฅผ ์ฐพ๋๋ค.)
๐ ๏ธ ํ์ด ๊ณผ์
1๏ธโฃ ์ ๋ ฅ ์ฒ๋ฆฌ ๋ฐ ์ด๊ธฐํ
- ํ๋ ฌ ๊ฐ์ N์ ์ ๋ ฅ๋ฐ๊ณ , ๊ฐ ํ๋ ฌ์ (ํ, ์ด) ํฌ๊ธฐ๋ฅผ ์ ์ฅํ๋ค.
- dp[i][j] ํ ์ด๋ธ์ ์์ฑํ๊ณ , ๋๊ฐ์ (dp[i][i])์ 0์ผ๋ก ์ด๊ธฐํํ๋ค.
2๏ธโฃ DP ํ ์ด๋ธ ์ฑ์ฐ๊ธฐ
- ๋ถ๋ถ ํ๋ ฌ ํฌ๊ธฐ(2๊ฐ ์ด์)๋ถํฐ ์ ์ง์ ์ผ๋ก ์ฆ๊ฐ์ํค๋ฉฐ dp[i][j] ๊ฐ์ ๊ฐฑ์ ํ๋ค.
- dp[i][j] = min(dp[i][k] + dp[k+1][j] + cost) ๋ฅผ ํตํด ์ต์ ์ k๋ฅผ ์ฐพ๋๋ค.
3๏ธโฃ ์ต์ ์ฐ์ฐ ํ์ ์ฐพ๊ธฐ
- dp[1][N]์ด ์ ์ฒด ํ๋ ฌ์ ๊ณฑํ๋ ์ต์ ์ฐ์ฐ ํ์๊ฐ ๋๋ค.
๐ป ์ฝ๋ ๊ตฌํ (Java)
import java.util.*;
public class Main {
static int[][] dp;
static int[][] matrix;
static int N;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
N = sc.nextInt();
matrix = new int[N + 1][2]; // ํ๋ ฌ ํฌ๊ธฐ ์ ์ฅ
dp = new int[N + 1][N + 1];
for (int i = 1; i <= N; i++) {
matrix[i][0] = sc.nextInt(); // ํ ํฌ๊ธฐ
matrix[i][1] = sc.nextInt(); // ์ด ํฌ๊ธฐ
}
System.out.println(matrixChainOrder());
}
public static int matrixChainOrder() {
for (int len = 2; len <= N; len++) { // ๋ถ๋ถ ํ๋ ฌ ๊ธธ์ด (2๊ฐ ์ด์)
for (int i = 1; i + len - 1 <= N; i++) { // ์์ ์ธ๋ฑ์ค
int j = i + len - 1; // ๋ ์ธ๋ฑ์ค
dp[i][j] = Integer.MAX_VALUE;
for (int k = i; k < j; k++) { // ์ค๊ฐ ์ง์ k
int cost = dp[i][k] + dp[k + 1][j] + (matrix[i][0] * matrix[k][1] * matrix[j][1]);
dp[i][j] = Math.min(dp[i][j], cost);
}
}
}
return dp[1][N]; // ์ ์ฒด ํ๋ ฌ์ ๊ณฑํ๋ ์ต์ ์ฐ์ฐ ํ์
}
}
โฑ๏ธ ์๊ฐ ๋ณต์ก๋ ๋ถ์
๐ O(N³) (์ต๋ 500³ = ์ฝ 1์ต 2500๋ง ์ฐ์ฐ)
๐ก dp[i][j]๋ฅผ ๊ตฌํ๊ธฐ ์ํด ์ค๊ฐ ์ง์ k๋ฅผ ํ์ํด์ผ ํ๋ฏ๋ก **O(N²) × O(N) = O(N³)**์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค.
๐ฅ ๋คํํ N ≤ 500์ด๋ฏ๋ก DP๋ฅผ ์ฌ์ฉํ์ฌ ์ถฉ๋ถํ ํด๊ฒฐ ๊ฐ๋ฅํ๋ค.
๐ก ๋๋์
โ
์ต์ ์ ํ๋ ฌ ๊ณฑ์
์์๋ฅผ ์ฐพ๋ DP ๋ฌธ์ ๋ก,
๋จ์ํ ์ฐจ๋ก๋ก ๊ณฑํ๋ ๊ฒ์ด ์๋ ๋ถ๋ถ ๋ฌธ์ ๋ฅผ ์ ์ํ๊ณ ์ต์ ์ ์์๋ฅผ ์ฐพ๋ ๊ฒ์ด ์ค์ํ๋ค.
โ ํ๋ ฌ ๊ณฑ์ ์ฐ์ฐ ํ์๋ฅผ ๊ตฌํ ๋, ํ๋ ฌ ํฌ๊ธฐ๋ฅผ ๊ณ ๋ คํ๋ ๊ฒ์ด ํต์ฌ์ด์๋ค.
โ ํ์ผ ํฉ์น๊ธฐ(11066) ๋ฌธ์ ์ ์ ์ฌํ ๋ฐฉ์์ผ๋ก ํด๊ฒฐํ ์ ์์๋ค! ๐
'์๊ณ ๋ฆฌ์ฆ > BOJ - Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ/Java] 7579. ์ฑ (0) | 2025.03.10 |
---|---|
[BOJ/Java] 4991. ๋ก๋ด ์ฒญ์๊ธฐ (0) | 2025.03.10 |
[BOJ/Java] 11066. ํ์ผ ํฉ์น๊ธฐ (0) | 2025.03.10 |
[BOJ/Java] 6087. ๋ ์ด์ ํต์ (0) | 2025.03.09 |
[BOJ/Java] 6549. ํ์คํ ๊ทธ๋จ์์ ๊ฐ์ฅ ํฐ ์ง์ฌ๊ฐํ (1) | 2025.03.09 |