1. 개념
2. 예시
swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWBOKg-a6l0DFAWr
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
O(N^2) 풀이법
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Scanner;
public class swea_3307최장증가부분수열 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int t = sc.nextInt();
for (int tc = 1; tc <= t; tc++) {
int n = sc.nextInt();
int lis[] = new int[n];
int val[] = new int[n];
for (int i = 0; i < val.length; i++) {
lis[i]=1;
}
for (int i = 0; i < n; i++) {
val[i] = sc.nextInt();
}
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]++;
}
}
}
Arrays.sort(lis);
System.out.println("#"+tc+" "+lis[n-1]);
}
}
}
입력값과 이미 탐색한 부분을 비교하는 조건문
값이 더 크면서, 증가하는 길이가 같다면 더 뒤에 올수 있다는 뜻이어서 lis를 하나 증가시킨다.
if(val[j] < val[i] && lis[i] == lis[j]) {
lis[i]++;
}
12015번: 가장 긴 증가하는 부분 수열 2
첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ Ai ≤ 1,000,000)
www.acmicpc.net
NlogN 풀이법
import java.util.Arrays;
import java.util.Scanner;
public class back_12015가장긴증가하는부분수열2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int arr[] = new int[n];
int lis[] = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = sc.nextInt();
}
int size = 0;
for (int i = 0; i < n; i++) {
int k = Arrays.binarySearch(lis, 0, size, arr[i]);
if (k < 0) {
int temp = Math.abs(k) - 1;
lis[temp] = arr[i];
if (size == temp)
size++;
}
}
System.out.println(size);
}
}
//반복문돌면서 키보다 짧은 자리를 찾고 갱신
//사이즈하고 찾은 자리값과 같으면 사이즈 늘려준다
//for n
//temp = binerySearch(lis,0,size,arr[i])
//arr = abs(temp) -1
//if temp == size
//size++
//lis를 출력
이론
{3,2,6,4,5,1}배열이 주어질 때, arr의 값을 기준으로 lis값이 더 작아야한다.
더 작은것중 가장 큰 값을 갱신한다.
lis의 각 길이 마다 가장 작은 값을 저장하고 있다.
lis크기가 1이라면 1~6까지 올수 있는데 이때, 1이 가장 작은 값
lis크기가 2라면 (3 6) (3 4) (2 6) (2 4) (4 5)가 올 수 있다. 이때 4가 가장 작은값이다.
즉 lis의 최종 길이는 최장 증가 수열이다. 하지만 그 data는 lis가 아니다. 길이만 알 수 있다
'알고리즘 > 코테에 필요한 지식만' 카테고리의 다른 글
다익스트라 알고리즘 (0) | 2020.09.27 |
---|---|
투 포인터 (0) | 2020.09.25 |
순열과 조합 뿌시기 (0) | 2020.08.28 |
우선순위 큐 (0) | 2020.08.28 |
비트연산자 (0) | 2020.08.27 |