Tags
- ๊ต์ฌ
- BOJ
- ์ ์๋ก
- ๊น์ด ์ฐ์ ํ์
- sort
- SpringBoot
- stack
- ์ํ
- DP
- Brute Force Algorithm
- ๊ทธ๋ํ ์ด๋ก
- CodingTest
- PGM
- ์๋ฎฌ๋ ์ด์
- Dynamic Programming
- queue
- ๊ทธ๋ํ ํ์
- LV2
- ๊ตฌํ
- ์ ๋ ฌ
- ๋๋น ์ฐ์ ํ์
- dfs
- BFS
- Java
- ๋ฌธ์์ด
- greedy
- ๋ฐฑํธ๋ํน
- ์๋ฃ๊ตฌ์กฐ
- Study
- Python
Archives
๊ธฐ๋ก๋ฐฉ
BOJ_11066 : ํ์ผ ํฉ์น๊ธฐ ๋ณธ๋ฌธ
๐ธ ๋ฌธ์ ๋ถ์ ๐ธ
- T๋ฒ์ ํ ์คํธ ์ผ์ด์ค๋ก K๊ฐ์ ์์๊ฐ ์ฃผ์ด์ง๋ค.
- ์ฐ์๋ ๋ ๊ฐ์ ํฉ์ผ๋ก ๊ณ์ฐํ์ ๋ ์ฐ์ฐ ๋น์ฉ์ ์ต์๊ฐ์ ์ถ๋ ฅํ๋ค.
๐ธ ๋ฌธ์ ํ์ด ๐ธ
- K๊ฐ 500์ด์ง๋ง, Brute Force๋ก ํ์ธํ์ ๋ O(K^3) ์ด์์ด ๋์ฌ ๊ฒ์ผ๋ก ์์ํด์ ๋ ํจ์จ์ ์ผ๋ก ๊ตฌํ๊ธฐ ์ํด DP ๋ฅผ ํ์ฉํ๊ณ ์ ํ๋ค.
- dp ๋ฐฐ์ด์ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌํ๋ค.
- 1๋ฒ๋ถํฐ K๋ฒ ์ซ์๋ฅผ ํฉํ์ ๋ ์ต์๊ฐ์ ๊ตฌํ๊ณ ์ ํ๋ฏ๋ก, dp[0][K-1]๋ฅผ ๊ตฌํ๋ค.
๋ค์ ๋งํด dp ๋ฐฐ์ด์ ํด๋น ๋ฒ์์ ์ต์์ฐ์ฐ ๋น์ฉ์ ์ ์ฅํ๋ค. - dp ๋ฐฐ์ด์ ์ฑ์๊ฐ ๋, ์ฐ์๋ ๋ ๊ฐ์ ๋ํด๊ฐ๋ฏ๋ก, ์ค๊ฐ์ 1๋ฒ ์๋ผ์ ์ข์ฐ ๊ฐ์ ๋ํ์ ๋์ ์ต์๊ฐ์ ๊ตฌํ๋ค.
- ๋ฐ๋ผ์ ์ ํ์์ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌํ ์ ์๋ค.
- K๊ฐ์ ์ซ์ ์ค left ~ right ๋ฒ์๋ฅผ ๊ณ์ฐํ์ ๋ ์ต์๊ฐ
- dp[ left ][ right ] = min(dp[ left ][ right ], dp[ left ][ mid ] + dp[ mid + 1][ right ] + (left๋ถํฐright๊น์ง์ ํฉ) ]
- ์ ํ์์ ํ์ดํ๋ฉด, ๋ฒ์์ ํด๋นํ๋ ์ซ์๋ค์ ์ดํฉ๊ณผ ์ข์ฐ์ธก ๋ฒ์ ํฉ์ ๋ง๋ค ๋ ์คํ ๋ ๋น์ฉ์ ๋ํ ๊ฐ์ ์ต์๊ฐ์ ์ฐพ์์ผ ํ๋ค.
- ๋ฐ๋ผ์ ๊ตฌ๊ฐํฉ ๋ฐฐ์ด์ ๋ง๋ค์ด ํน์ ๋ฒ์์ ํฉ์ ์ฝ๊ฒ ๊ตฌํ ์ ์๋๋ก ํ๋ค.
- 1๋ฒ๋ถํฐ K๋ฒ ์ซ์๋ฅผ ํฉํ์ ๋ ์ต์๊ฐ์ ๊ตฌํ๊ณ ์ ํ๋ฏ๋ก, dp[0][K-1]๋ฅผ ๊ตฌํ๋ค.
๐ธ ์ฝ๋ ๐ธ
import java.io.*;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
StringBuilder sb = new StringBuilder();
// Test Case
int T = Integer.parseInt(br.readLine());
for (int t = 0; t < T; t++) {
// Input
int K = Integer.parseInt(br.readLine());
int[] files = new int[K]; // ํ์ผ ํฌ๊ธฐ
long[] sumArr = new long[K + 1]; // ๋์ ํฉ
st = new StringTokenizer(br.readLine());
for (int i = 0; i < K; i++) {
files[i] = Integer.parseInt(st.nextToken());
sumArr[i + 1] = sumArr[i] + files[i]; // ๋์
}
// Dynamic Programming
// dp[i][j] : i ~ j ๋ฒ์๋ฅผ ๋ํ ๋ ๊ณ์ฐ๋ ์ต์๊ฐ
// ์๋ผ์ ์ฐพ๊ธฐ : ์ผ์ชฝ ๊ณ์ฐ๊ฐ + ์ค๋ฅธ์ชฝ ๊ณ์ฐ๊ฐ + files ์ i~j ๋ฒ์์ ํฉ
long[][] dp = new long[K][K];
for (int size = 2; size <= K; size++) { // i~j ๋ฒ์์ ํฌ๊ธฐ
for (int i = 0; i <= K - size; i++) { // ๋ฒ์ ์ผ์ชฝ ์ธ๋ฑ์ค
int j = i + size - 1; // ๋ฒ์ ์ค๋ฅธ์ชฝ ์ธ๋ฑ์ค
dp[i][j] = Long.MAX_VALUE;
for (int l = i; l < j; l++) { // ๋ฒ์ ์๋ผ์ ํฉ์ ์ต์๊ฐ ์ฐพ๊ธฐ
dp[i][j] = Math.min(dp[i][j], dp[i][l] + dp[l + 1][j] + sumArr[j + 1] - sumArr[i]);
}
}
}
sb.append(dp[0][K - 1]).append('\n');
}
// Output
bw.write(sb.toString());
bw.flush();
}
}
๐ธ ์ฝ๋ ํด์ ๐ธ
- ํน์ ๊ตฌ๊ฐ์ ํฉ์ ๋น ๋ฅด๊ฒ ๊ตฌํ๊ธฐ ์ํด ๊ตฌ๊ฐํฉ ๋ฐฐ์ด sumArr๋ฅผ ์ฌ์ฉํ๋ค.
- sumArr์ dp ๋ฐฐ์ด์ ๋์ ๊ฐ์ด ์์ฃผ ์ปค์ง ์ ์์ผ๋ฏ๋ก, longํ์ ์ฌ์ฉํ๋ค.
- ๋ฒ์๋ฅผ ์๋ผ ์ฌ์ฉํ๊ธฐ ์ํด dp๋ 2์ฐจ์ ๋ฐฐ์ด๋ก ์ฌ์ฉํ๋ค.
- dp ๋ฐฐ์ด์ ๊ณ์ฐํ ๋, ๋ฒ์์ ํฌ๊ธฐ๋ฅผ 2๋ถํฐ K๊น์ง ํค์๊ฐ๋ฉฐ ์ต์ ๋น์ฉ์ ๊ณ์ฐํ๋ค.
- ์ต์ข ๊ฐ์ธ dp[0][K-1]๋ฅผ ์ถ๋ ฅํ๋ค.
๐ธ end ๐ธ
- ์ง์ ์ ํ์๋ BOJ_11049 : ํ๋ ฌ ๊ณฑ์
์์์ ๋งค์ฐ ์ ์ฌํ ๋ฌธ์ ์๋ค.
- 2์ฐจ์ dp ๋ฐฐ์ด์ ์ฌ์ฉํ๊ณ , ์ข์ฐ์ธก์ผ๋ก ์๋ผ์ ์ต์๊ฐ์ ๊ตฌํ๋ ๋ฐฉ์์ด ์ผ์นํ๋ค.
- ์ฐจ์ด์ ์ผ๋ก๋ ๊ตฌ๊ฐํฉ ๋ฐฐ์ด์ด ํ์ํ๋ค๋ ๊ฒ์ด๋ค.
- ์ง์ ๋ฌธ์ ํ์ด๊ฐ ๋ ์ฌ๋ผ์ ์๊ณ ๋ฆฌ์ฆ ์ ํ์๋ ์๊ฐ์ด ๋ค์ง ์์๋๋ฐ, ์คํ๋ ค ์ง์ ํ์ด์์ ์ฐจ์ด์ ์ ์๊ฐํ์ง ๋ชปํด์ ํ
์คํธ ์ผ์ด์ค 2๋ฒ์ ๊ณ์ ํต๊ณผ ๋ชปํ์๋ค.
- ๊ทธ๋์ 1์๊ฐ ์ด์ ๊ณ ๋ฏผํ๊ณ , ์์ผ๋ก ๋๋ฒ๊น ๋ ๋ง์ด ํด๋ดค์ง๋ง ๊ฒฐ๊ตญ ๋ชป์ฐพ๊ณ GPT์ ์ ํ์ ํผ๋๋ฐฑ์ ๋ฐ์๋ค.
- dp๋ฐฐ์ด์ ๋์ ํ ๋, ์ข์ฐ์ธก ๊ฐ์ ๊ฐ์ ธ์ค๋๊ฑด ์ ํ๋๋ฐ ํ์ฌ๊ฐ์ ์ข์ฐ์ธก๊ฐ์ ํฉ์ด๋ผ๊ณ ์๊ฐํด์ x2 ๋ฅผ ํด๋ฒ๋ ธ๋ค.
- ๊ฒฐ๊ณผ์ ์ผ๋ก ๋์ ๋์ผ ํ๋ ๊ฐ์ ํ์ฌ ๋ฒ์์ ๋ค์ด๊ฐ๋ ๋ชจ๋ ์ซ์์ ์ดํฉ์ด์ด์ ๋์ ํฉ์ด ํ์ํ๋ค.
- ๊ณ ๋ฏผ์ ํ์ ์ ๋ค์๊ณผ ๊ฐ๋ค....
728x90
'CodingTest > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ_2146 : ๋ค๋ฆฌ ๋ง๋ค๊ธฐ (0) | 2024.05.29 |
---|---|
BOJ_15685 : ๋๋๊ณค ์ปค๋ธ (0) | 2024.05.26 |
BOJ_11049 : ํ๋ ฌ ๊ณฑ์ ์์ (0) | 2024.05.23 |
BOJ_9466 : ํ ํ๋ก์ ํธ (0) | 2024.05.23 |
BOJ_1062 : ๊ฐ๋ฅด์นจ (0) | 2024.05.20 |