File tree Expand file tree Collapse file tree 1 file changed +55
-0
lines changed Expand file tree Collapse file tree 1 file changed +55
-0
lines changed Original file line number Diff line number Diff line change
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
+ }
You can’t perform that action at this time.
0 commit comments