์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
- ํ๋ฌํฐ
- ํ์ด์ฝ ์ถ์ฒ์ธ
- ํ์ด์ฝ ์ด๋์ฝ๋
- ๋ฐฐ์ด
- php ํ๋ก๊ทธ๋๋ฐ ์ ๋ฌธ ์์
- php ํ๋ก๊ทธ๋๋ฐ ์ ๋ฌธ ์๋ฃจ์
- ํ์ด์ฝ ์น๊ตฌ์ฝ๋
- spring
- SWEA
- programmers
- php ํ๋ก๊ทธ๋๋ฐ ์ ๋ฌธ ์ฐ์ต๋ฌธ์
- ํ๋ฌํฐ ๊ฐ๋ฐํ๊ฒฝ ์ค์
- php ํ๋ก๊ทธ๋๋ฐ ์ ๋ฌธ 3ํ
- ํ์ด์ฌ
- php ํ๋ก๊ทธ๋๋ฐ ์ ๋ฌธ ๋ฌธ์ ํ์ด
- Flutter
- JAVA SPRING
- ๋ฐฑ์ค
- C
- ํ์ด์ฝ ์ถ์ฒ์ธ์ฝ๋
- ์คํ๋ง
- php ํ๋ก๊ทธ๋๋ฐ
- Java
- ์๋ฐ ์คํ๋ง
- php ํ๋ก๊ทธ๋๋ฐ ์ ๋ฌธ
- C์ธ์ด
- ํ์ ๋ถ๊ธฐ
- php
- ์๋ฐ
- ์ต๋จ ๊ฒฝ๋ก
- Today
- Total
ImJay
[BOJ/Java] 11066. ํ์ผ ํฉ์น๊ธฐ ๋ณธ๋ฌธ
๐ [BOJ/Java] 11066. ํ์ผ ํฉ์น๊ธฐ
๐ ๋ฌธ์ ๋งํฌ: ๋ฐฑ์ค 11066๋ฒ - ํ์ผ ํฉ์น๊ธฐ
๐ ๋ฌธ์ ํด์
๐ ์ฌ๋ฌ ๊ฐ์ ํ์ผ์ด ์ฐ์์ผ๋ก ๋์ฌ ์๊ณ , ์ด๋ฅผ ํ๋์ ํ์ผ๋ก ํฉ์น๋ ์ต์ ๋น์ฉ์ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ค.
๐ฐ ํ์ผ์ ํฉ์น๋ ๋น์ฉ์ ๋ ํ์ผ ํฌ๊ธฐ์ ํฉ์ด๋ฉฐ, ์ฌ๋ฌ ๋ฒ ํฉ์น ๊ฒฝ์ฐ ๋์ ๋น์ฉ์ด ์ฆ๊ฐํ๋ค.
๐ ๏ธ ํ์ผ์ ํฉ์น๋ ์์๋ฅผ ์ ์ ํด์ผ ์ต์ ๋น์ฉ์ด ๋๋ค.
๐ฏ ํต์ฌ ๊ฐ๋ :
- ํ์ผ์ ์ด๋ค ์์๋ก ํฉ์น๋์ง๊ฐ ์ค์ํ๋ฉฐ, ์ต์ ์ ์์๋ฅผ ์ฐพ๊ธฐ ์ํด ๋์ ๊ณํ๋ฒ(DP)์ ํ์ฉํ๋ค.
๐ ๏ธ ํ์ด ๊ณผ์
1๏ธโฃ ์ ๋ ฅ ์ฒ๋ฆฌ ๋ฐ ์ด๊ธฐํ
- K๊ฐ์ ํ์ผ ํฌ๊ธฐ๋ฅผ ์ ๋ ฅ๋ฐ๊ณ , **๋์ ํฉ ๋ฐฐ์ด(sum[])**์ ๋ง๋ ๋ค.
- dp[i][j]๋ i๋ฒ์งธ ํ์ผ๋ถํฐ j๋ฒ์งธ ํ์ผ๊น์ง ํฉ์น๋ ์ต์ ๋น์ฉ์ ์๋ฏธํ๋ค.
2๏ธโฃ DP ํ ์ด๋ธ ์ฑ์ฐ๊ธฐ
- ๋ถ๋ถ ํ์ผ๋ค์ ํฉ์น๋ ์ต์ ๋น์ฉ์ ๊ตฌํ๋ ์ ํ์์ ์ฌ์ฉํ๋ค.
- dp[i][j] = min(dp[i][k] + dp[k+1][j] + sum[j] - sum[i-1])
(i๋ถํฐ j๊น์ง ํฉ์น๋ ์ต์ ๋น์ฉ์ ์ฐพ๊ธฐ ์ํด, ์ค๊ฐ k๋ฅผ ๊ธฐ์ค์ผ๋ก ๋๋์ด ๊ณ์ฐ)
3๏ธโฃ ์ต์ ์ ํ์ผ ํฉ์น๊ธฐ ์์๋ฅผ ์ฐพ๊ธฐ
- ์์ ๊ตฌ๊ฐ๋ถํฐ ์ ์ฐจ ํฐ ๊ตฌ๊ฐ๊น์ง ์ต์ ์ ํด๋ฅผ ์ฐพ์๊ฐ๋ค.
- DP ํ ์ด๋ธ์ ์ฑ์ด ํ dp[1][K] ๊ฐ์ด ์ต์ ๋น์ฉ์ด ๋๋ค.
๐ป ์ฝ๋ ๊ตฌํ (Java)
import java.util.*;
public class Main {
static int[][] dp;
static int[] sum;
static int K;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T = sc.nextInt(); // ํ
์คํธ ์ผ์ด์ค ๊ฐ์
while (T-- > 0) {
K = sc.nextInt();
int[] files = new int[K + 1];
dp = new int[K + 1][K + 1];
sum = new int[K + 1];
for (int i = 1; i <= K; i++) {
files[i] = sc.nextInt();
sum[i] = sum[i - 1] + files[i]; // ๋์ ํฉ ๋ฐฐ์ด
}
System.out.println(mergeFiles());
}
}
public static int mergeFiles() {
for (int len = 2; len <= K; len++) { // ๋ถ๋ถ ํ์ผ ๊ธธ์ด (2๊ฐ ์ด์)
for (int i = 1; i + len - 1 <= K; 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] + (sum[j] - sum[i - 1]);
dp[i][j] = Math.min(dp[i][j], cost);
}
}
}
return dp[1][K]; // ์ ์ฒด ํ์ผ์ ํฉ์น๋ ์ต์ ๋น์ฉ
}
}
โฑ๏ธ ์๊ฐ ๋ณต์ก๋ ๋ถ์
๐ O(K³) (์ต๋ 500³ = ์ฝ 1์ต 2500๋ง ์ฐ์ฐ)
๐ก dp[i][j]๋ฅผ ๊ตฌํ๊ธฐ ์ํด ์ค๊ฐ ์ง์ k๋ฅผ ํ์ํด์ผ ํ๋ฏ๋ก **O(K²) × O(K) = O(K³)**์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค.
๐ฅ ๋คํํ K ≤ 500์ด๋ฏ๋ก ์ ์ ํ DP ์ต์ ํ ์์ด๋ ํด๊ฒฐ ๊ฐ๋ฅํ๋ค.
๐ก ๋๋์
โ
์ต์ ๋ถ๋ถ ๊ตฌ์กฐ๋ฅผ ์ด์ฉํ ๋์ ๊ณํ๋ฒ(DP) ๋ฌธ์ ๋ก,
๋ถ๋ถ ๋ฌธ์ ๋ฅผ ์ ์ํ๊ณ ์ ํ์์ ์ธ์ฐ๋ ๊ฒ์ด ํต์ฌ์ด์๋ค.
โ ๋์ ํฉ ๋ฐฐ์ด(sum[])์ ์ฌ์ฉํ์ฌ ๋งค๋ฒ ๋ถ๋ถ ํฉ์ ๊ตฌํ์ง ์๋๋ก ์๊ฐ์ ๋จ์ถํ ์ ์์๋ค.
โ ํ์ผ์ ํฉ์น๋ ์์๋ฅผ ์ง์ ์ ํ๋ ๊ฒ ์๋, DP๋ก ์ต์ ์ ํด๋ฅผ ์ฐพ๋ ๋ฐฉ์์ด ํฅ๋ฏธ๋ก์ ๋ค! ๐
'์๊ณ ๋ฆฌ์ฆ > BOJ - Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ/Java] 4991. ๋ก๋ด ์ฒญ์๊ธฐ (0) | 2025.03.10 |
---|---|
[BOJ/Java] 11049. ํ๋ ฌ ๊ณฑ์ ์์ (0) | 2025.03.10 |
[BOJ/Java] 6087. ๋ ์ด์ ํต์ (0) | 2025.03.09 |
[BOJ/Java] 6549. ํ์คํ ๊ทธ๋จ์์ ๊ฐ์ฅ ํฐ ์ง์ฌ๊ฐํ (1) | 2025.03.09 |
[BOJ/Java] 9376. ํ์ฅ (0) | 2025.03.09 |