티스토리 뷰

//알고리즘 

1. dp

 

2. 이분탐색을 이용하여 dp테이블을 구현

더보기
import java.io.*;
import java.util.*;

public class 가장긴증가하는부분수열2_12015 {
	static int N, arr[], LIS[];

	public static void main(String[] args) throws IOException {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		N = Integer.parseInt(br.readLine());
		arr = new int[N];
		LIS = new int[N];

		StringTokenizer st = new StringTokenizer(br.readLine(), " ");
		for (int i = 0; i < N; i++) {
			arr[i] = Integer.parseInt(st.nextToken());
		}

		int size = 0;
		for (int i = 0; i < N; i++) {
			int tmp = Arrays.binarySearch(LIS, 0, size, arr[i]);

			if (tmp >= 0)
				continue;
			tmp = Math.abs(tmp) - 1;
			LIS[tmp] = arr[i];

			if (tmp == size) {
				++size;
			}
		}

		System.out.println(size);

	}

}

 

※ 이전 문제와 다르게 2중 for문으로는 해결할 수 없는 문제. 시간복잡도 nlogn으로 해결 가능함.

'Algorithm' 카테고리의 다른 글

백준_행성연결_16398_Kruskal  (0) 2021.01.09
백준_행성연결_16398_Prim  (0) 2021.01.07
백준_가장 긴 증가하는 부분수열_11053  (0) 2021.01.05
백준_오목_2615  (0) 2021.01.04
프로그래머스_가장 먼 노드  (0) 2021.01.03
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG more
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함