Tags
- Java
- Study
- ๋๋น ์ฐ์ ํ์
- ์๋ฃ๊ตฌ์กฐ
- BOJ
- ๋ฐฑํธ๋ํน
- ์ ๋ ฌ
- ๊ตฌํ
- PGM
- CodingTest
- greedy
- Python
- stack
- dfs
- Brute Force Algorithm
- ๊ทธ๋ํ ํ์
- Dynamic Programming
- ์๋ฎฌ๋ ์ด์
- queue
- BFS
- ๊ต์ฌ
- LV2
- ๋ฌธ์์ด
- ๊ทธ๋ํ ์ด๋ก
- sort
- ์ ์๋ก
- DP
- ์ํ
- SpringBoot
- ๊น์ด ์ฐ์ ํ์
Archives
๊ธฐ๋ก๋ฐฉ
BOJ_14002 : ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด 4 ๋ณธ๋ฌธ
๐ธ ๋ฌธ์ ๋ถ์ ๐ธ
- ์ ํ์ ์ธ ์ต์ฅ ์ฆ๊ฐ ๋ถ๋ถ ์์ด (LIS) ๋ฌธ์ ์ด๋ค.
- LIS์ DP ํ์ด๋ O(n^2) ์ด๊ณ , ์ด๋ถํ์ ํ์ด๋ O(nlogn)์ด๋ค.
- ์ฌ๊ธฐ์๋ n์ด 1000์ด๋ฏ๋ก, DP ํ์ด๋ฅผ ์ฌ์ฉํ๋ค.
๐ธ ๋ฌธ์ ํ์ด ๐ธ
- DP ๋ฐฐ์ด์ ๋ง๋ค์ด ์ฌ์ฉํ๋ค.
- DP ๋ฐฐ์ด์๋ ํ์ฌ ์ธ๋ฑ์ค๋ฅผ ํฌํจํด์ ๋ง๋ค์ด์ง๋ ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด์ ๊ธธ์ด๋ฅผ ์ ์ฅํ๋ค.
- ๋ฐฐ์ด์ ์ํํ๋ฉฐ, ์ด์ ์ธ๋ฑ์ค๋ค ์ค DP ๋ฐฐ์ด ๊ฐ์ ์ต๋๊ฐ + 1์ ์ ์ฅํ๋ค.
- dp[i] = max(dp[i], dp[j] + 1)
๐ธ ์ฝ๋ ๐ธ
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
// Input
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(br.readLine());
int[] A = new int[N];
Dp[] dp = new Dp[N];
StringTokenizer st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) {
A[i] = Integer.parseInt(st.nextToken());
dp[i] = new Dp(1, 0);
}
// DynamicProgramming
int maxVal = 1;
int maxIdx = 0;
for (int i = 1; i < N; i++) {
for (int j = 0; j < i; j++) {
if (A[j] < A[i] && dp[j].cost + 1 > dp[i].cost) {
dp[i].cost = dp[j].cost + 1;
dp[i].before = j;
}
}
if (maxVal < dp[i].cost) {
maxVal = dp[i].cost;
maxIdx = i;
}
}
// Output
int[] ans = new int[maxVal];
int idx = maxVal - 1;
ans[idx--] = A[maxIdx];
while (idx >= 0) {
maxIdx = dp[maxIdx].before;
ans[idx--] = A[maxIdx];
}
StringBuilder sb = new StringBuilder();
sb.append(maxVal).append('\n');
for (int i = 0; i < maxVal; i++) {
sb.append(ans[i]).append(' ');
}
bw.write(sb.toString());
bw.flush();
}
private static class Dp {
int cost, before;
public Dp(int cost, int before) {
this.cost = cost;
this.before = before;
}
}
}
๐ธ ์ฝ๋ ํด์ ๐ธ
- ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด์ ์์๋ค๋ ์ถ๋ ฅํด์ผ ํ๋ฏ๋ก, ๊ฐ๊ณผ ์ด์ ์ธ๋ฑ์ค๋ฅผ ์ ์ฅํ๋ Dp ํด๋์ค๋ฅผ ๋ง๋ค์ด ์ฌ์ฉํ๋ค.
- LIS์ DP ํ์ด ์งํํ๊ณ , ์ด์ ์ธ๋ฑ์ค๋ฅผ ํ์ํด์ LIS ์์ด์ ์์ ๊ฐ์ ๊ตฌํ๋ค.
๐ธ end ๐ธ
- ๊ธฐ๋ณธ์ ์ธ LIS์ DP ํ์ด ๋ฌธ์ ์์ ์์ ์ถ๋ ฅ๊น์ง ์กฐ๊ธ ์ถ๊ฐ๋ ๋ฌธ์ ์๋ค.
- LIS๋ฅผ ์ ๋ฆฌํด๋ ํฌ์คํ ์ด ์์ด์ ํฌ๊ฒ ์ด๋ ต์ง ์์๋๋ฐ, ๋ค์๋ณด๋ ์ด๋ถ ํ์์ ๊ธฐ์ต์ด ์ ์๋๋ค.
- N ์ด 1์ธ ๊ฒฝ์ฐ์ ์ฒ๋ฆฌ๊ฐ ๋ฏธํกํด์ ๋ฐํ์ ์๋ฌ๊ฐ ํ๋ฒ ๋ฌ๋ค.
728x90
'CodingTest > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ_1261 : ์๊ณ ์คํ (0) | 2024.05.10 |
---|---|
BOJ_1339 : ๋จ์ด ์ํ (0) | 2024.05.06 |
BOJ_1922 : ๋คํธ์ํฌ ์ฐ๊ฒฐ (0) | 2024.04.30 |
BOJ_2573 : ๋น์ฐ (0) | 2024.04.27 |
BOJ_14499 : ์ฃผ์ฌ์ ๊ตด๋ฆฌ๊ธฐ (0) | 2024.04.26 |