dp ๋ฐฐ์ด์ ์์ฑํ์ฌ dp[i] ๋ Array[i]๊น์ง์ ์์๋ค๋ก ๋ง๋ค ์ ์๋ ๋ถ๋ถ ์์ด ๊ธธ์ด์ ์ต๋๊ฐ์ ์ ๋ ฅํ ๊ฒ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ๋ถ๋ถ ์์ด์ ๊ธธ์ด๋ ์ต์ 1 ๊ฐ์ ๊ฐ์ง๋ฏ๋ก, dp์ ๋ชจ๋ ์์๋ ๋ํดํธ 1์ ๊ฐ์ง๋ค๋ ์ฌ์ค์ ์ ์ ์๋ค.
dp๋ฅผ ์ฑ์ฐ๋ ๋ฉ์ปค๋์ฆ์ ์์๋ณด์.
์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด, dp 6๋ฒ์งธ ์์๋ฅผ ์ฑ์์ผ ํ๋ ์ํฉ์ด๋ผ๊ณ ์๊ฐํด๋ณด์.
Array์ ์ฒซ๋ฒ์งธ ์์ 10์ 40๋ณด๋ค ์์ผ๋ฏ๋ก, ๋ถ๋ถ์์ด์ ๊ธธ์ด๋ 10์ด ๊ฐ์ง dp๊ฐ 1๋ณด๋ค 1์ด ํฐ 2๋ก ์ ๋ฐ์ดํธ ํ ์ ์๋ค.
Array์ ๋๋ฒ์งธ ์์ 20์ 40๋ณด๋ค ์์ผ๋ฏ๋ก, ๋ถ๋ถ์์ด์ ๊ธธ์ด๋ 20์ด ๊ฐ์ง dp๊ฐ 2๋ณด๋ค 1์ด ํฐ 3์ผ๋ก ์ ๋ฐ์ดํธ ํ ์ ์๋ค.
Array์ ์ธ๋ฒ์งธ ์์ 30์ 40๋ณด๋ค ์์ผ๋ฏ๋ก, ๋ถ๋ถ์์ด์ ๊ธธ์ด๋ 30์ด ๊ฐ์ง dp๊ฐ 3๋ณด๋ค 1์ด ํฐ 4์ผ๋ก ์ ๋ฐ์ดํธ ํ ์ ์๋ค.
Array์ ๋ค๋ฒ์งธ ์์ 23์ 40๋ณด๋ค ์๊ณ , ๋ถ๋ถ์์ด์ ๊ธธ์ด๋ 23์ด ๊ฐ์ง dp๊ฐ 3๋ณด๋ค 1์ด ํฐ 4์ผ๋ก ์ ๋ฐ์ดํธ ํ ์ ์์ง๋ง, ์ด๋ฏธ 40์ด ๊ฐ์ง dp๊ฐ์ 4์ด๋ฏ๋ก ๋ณํ๋ ์๋ค.
Array์ ๋ค์ฏ๋ฒ์งธ ์์ 25์ 40๋ณด๋ค ์๊ณ , ๋ถ๋ถ์์ด์ ๊ธธ์ด๋ 25์ด ๊ฐ์ง dp๊ฐ 4๋ณด๋ค 1์ด ํฐ 5์ผ๋ก ์ ๋ฐ์ดํธ ํ ์ ์๋ค.
์ฆ, dp[i]๋ฅผ ์ฑ์ฐ๊ธฐ ์ํด์ Array[i] ์ Array[0] ๋ถํฐ Array[i-1]์ ๋น๊ตํ๊ณ ,
Array[i] > Array[j]์ธ ๊ฒฝ์ฐ ( j์ ๋ฒ์๋ 0 ~ i-1)
dp[j] + 1 ๊ฐ์ด dp[i]๊ฐ ๋ณด๋ค ํฐ ๊ฒฝ์ฐ dp[j]+1์ dp[i]๋ก ์ ๋ฐ์ดํธ ํ๋ฉด ๋๋ ๋ฉ์นด๋์ฆ์ธ ๊ฒ์ด๋ค.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.valueOf(br.readLine());
int[] dp = new int[N + 1];
int[] array = new int[N + 1];
String[] input = br.readLine().split(" "); // ์์ด์ split์ ์ด์ฉํ์ฌ ๊ณต๋ฐฑ์ ๊ธฐ์ค์ผ๋ก ๋๋ String ๋ฐฐ์ด๋ก ์
๋ ฅ ๋ฐ๋๋ค.
for (int i = 1; i <= N; i++) {
array[i] = Integer.valueOf(input[i - 1]); //์
๋ ฅ๋ฐ์ ์์ด์ด String์ด๊ธฐ ๋๋ฌธ์, int๋ก ๋ฐ๊พผ ํ array ๋ฐฐ์ด์ ์ฑ์ด๋ค.
dp[i] = 1; //์ด๋ค ์๊ฐ ์ค๋ ๋ถ๋ถ์์ด ๊ธธ์ด์ ์ต์๊ฐ์ 1์ด๋ฏ๋ก 1์ ๋ค ์
๋ ฅํด์ค๋ค.
}
for (int i = 1; i <= N; i++) {
for (int j = 1; j < i; j++) {
if (array[i] > array[j] && dp[j] + 1 > dp[i]) {
//1 ~ i-1 ๋ฒ์งธ ์์๋ค ์ค i๋ณด๋ค ์์ ๊ฒฝ์ฐ ๊ทธ๋ฆฌ๊ณ ํ์ฌ dp[i] ๋ณด๋ค dp[j]+1์ด ํฐ ๊ฒฝ์ฐ ์
๋ฐ์ดํธ
dp[i] = dp[j] + 1;
}
}
}
Arrays.sort(dp); //dp๋ฅผ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํด์ค
System.out.println(dp[N]); // ์ ์ผ ๋ค์์๋ ๊ฐ์ด ์ต๋๊ฐ์ผ ๊ฒ
}
}