Skip to content

Commit 538892b

Browse files
authored
Create BJ_14002_가장긴증가하는부분수열4.java
1 parent 2278c6f commit 538892b

File tree

1 file changed

+55
-0
lines changed

1 file changed

+55
-0
lines changed
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
import java.io.BufferedReader;
2+
import java.io.IOException;
3+
import java.io.InputStreamReader;
4+
import java.util.Stack;
5+
import java.util.StringTokenizer;
6+
7+
/**
8+
* 백준 14002번 가장 긴 증가하는 부분 수열 4
9+
* - LIS
10+
*/
11+
12+
public class Main {
13+
public static void main(String[] args) throws IOException {
14+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
15+
StringBuilder sb = new StringBuilder();
16+
int N = Integer.parseInt(br.readLine());
17+
18+
int[] nums = new int[N];
19+
StringTokenizer st = new StringTokenizer(br.readLine());
20+
21+
for (int i = 0; i < N; i++) {
22+
nums[i] = Integer.parseInt(st.nextToken());
23+
}
24+
25+
int[] dp = new int[N];
26+
dp[0] = 1;
27+
int lis = 1;
28+
29+
for (int i = 1; i < N; i++) {
30+
dp[i] = 1;
31+
for (int j = 0; j < i; j++) {
32+
if (nums[i] > nums[j]) {
33+
dp[i] = Math.max(dp[i], dp[j] + 1);
34+
lis = Math.max(lis, dp[i]);
35+
}
36+
}
37+
}
38+
39+
sb.append(lis + "\n");
40+
41+
Stack<Integer> stack = new Stack<>();
42+
for (int i = N - 1; i >= 0; i--) {
43+
if (dp[i] == lis) {
44+
stack.push(nums[i]);
45+
lis--;
46+
}
47+
}
48+
49+
while (!stack.isEmpty()) {
50+
sb.append(stack.pop() + " ");
51+
}
52+
53+
System.out.println(sb.toString());
54+
}
55+
}

0 commit comments

Comments
 (0)