- 코드
성공 코드 : 점화식을 통해 문제를 풀었다. 점화식은 현재 위치에 있는 값보다 작은 위치에 있는 값의 dp index 값보다 +1한 값을 가져온다. 없다면 그대로 1의 값을 갖는다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int [] dp = new int[N];
int [] a = new int[N];
StringTokenizer st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) {
a[i] = Integer.parseInt(st.nextToken());
}
int max = 1;
for (int i = 0; i < N; i++) {
if (dp[i] == 0)
dp[i] = 1;
for (int j = 0; j < i; j++) {
if (a[i] > a[j])
dp[i] = Math.max(dp[i], dp[j]+1);
}
if(max<dp[i])
max=dp[i];
}
System.out.println(max);
}
}
- 부가 설명
현재 위 코드의 시간복잡도는 O(N^2)이고, LIS 알고리즘을 사용하면 O(NlongN)의 시간 복잡도가 나온다고 한다.
'algorithm' 카테고리의 다른 글
[JAVA] 백준 13022번 : 늑대와 올바른 단어 (0) | 2020.08.29 |
---|---|
[JAVA] 백준 12738번 : 가장 긴 증가하는 부분 수열 3 (0) | 2020.08.28 |
[JAVA] 백준 13711번 : LCS 4 (0) | 2020.08.27 |
[JAVA] 백준 1958번 : LCS 3 (0) | 2020.08.27 |
[JAVA] 백준 1027번 : 고층 건물 (0) | 2020.08.27 |