1. 개념
2. 난이도
3. 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.StringTokenizer;
public class back_14002가장긴증가하는부분수열 {
static int n, val[], lis[],parval[],paridx[];
public static void main(String[] args) throws IOException {
init();
solve();
}
static void init() throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(in.readLine(), " ");
n = Integer.valueOf(st.nextToken());
st = new StringTokenizer(in.readLine(), " ");
val = new int[n];
lis = new int[n];
parval = new int[n];
paridx = new int[n];
for (int i = 0; i < n; i++) {
val[i] = Integer.valueOf(st.nextToken());
lis[i] =1;
}
}
static void solve() {
for (int i = 0; i < n; i++) {
for (int j = 0; j < i; j++) {
if(val[j] < val[i] && lis[i] == lis[j]) {
lis[i]++;
parval[i] = val[j];
paridx[i] = j;
}
}
}
int maxidx=0;
int max=0;
for (int i = 0; i < lis.length; i++) {
if(max < lis[i]) {
max=lis[i];
maxidx=i;
}
}
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(val[maxidx]);
int idx=maxidx;
while(parval[idx]!=0) {
list.add(parval[idx]);
idx = paridx[idx];
}
Collections.sort(list);
System.out.println(max);
for (int i = 0; i < list.size(); i++) {
System.out.print(list.get(i)+" ");
}
}
}
'알고리즘 > 백준' 카테고리의 다른 글
[백준 11403] 실버1 - 경로 찾기 (0) | 2020.09.26 |
---|---|
[백준 2116] 골드5 - 주사위 쌓기 (0) | 2020.09.26 |
[백준 10157] 자리배정 (0) | 2020.09.20 |
[백준 1405] 미친 로봇 (0) | 2020.08.15 |
백준 16234 인구 이동 (0) | 2020.03.13 |