in.add()
[14002] 가장 긴 증가하는 부분 수열 4 본문
문제 링크 : https://www.acmicpc.net/problem/14002
14002번: 가장 긴 증가하는 부분 수열 4
수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이
www.acmicpc.net
문제 해결 방법
DP를 이용한 LIS알고리즘으로 구현했다.
import java.util.Deque;
import java.util.LinkedList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int[] arr = new int[N + 1];
int[] length = new int[N + 1];
int max = 0;
for (int i = 1; i <= N; i++) {
arr[i] = sc.nextInt();
}
for(int i = 1; i <= N; i++) {
length[i] = 1;
for(int j = 0; j < i; j++){
if(arr[i] > arr[j]){
length[i] = Math.max(length[i], length[j] + 1);
max = Math.max(max, length[i]);
}
}
}
Deque<Integer> q = new LinkedList<>();
int idx = max;
for(int i = N; i > 0; i--) {
if (idx == length[i]) {
q.push(arr[i]);
idx--;
}
}
System.out.println(max);
while (!q.isEmpty()) {
System.out.print(q.pop() + " ");
}
}
}
'Algorithm > BOJ' 카테고리의 다른 글
[17472] 다리 만들기 2 (0) | 2021.09.18 |
---|---|
[14003] 가장 긴 증가하는 부분 수열 5 (0) | 2021.09.16 |
[1149] RGB거리 (0) | 2021.09.14 |
[2116] 주사위 쌓기 (0) | 2021.09.11 |
[2012] 등수 매기기 (0) | 2021.09.10 |
Comments