티스토리 뷰

// 알고리즘

1. dp

 

2. 현재 인덱스를 기준으로 이전 인덱스들을 탐색

 -> 만약 이전값이 현재 값보다 크다면 패스

 -> 이전값이 현재 값보다 작다면 dp 테이블을 비교하여 이전값의 dp테이블 +1

 

3. 생성된 dp 테이블에서 가장 큰 값이 가장 긴 증가하는 부분수열임.

 

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

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

	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];
		dp = new int[N];

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

		int max = 0;
		for (int i = 0; i < N; i++) {
			dp[i] = 1;
			for (int j = 0; j < i; j++) {
				if (arr[i] > arr[j] && dp[i] < dp[j] + 1) {
					dp[i] = dp[j] + 1;
				}
			}
			if (max < dp[i])
				max = dp[i];
		}

		System.out.println(max);
	}

}

 

※ 공식과도 같은 문제라 한번 테이블을 그려보면서 이해하고 구현했음. 

2중 for문이기 때문에 시간복잡도는 n*n 임 따라서 n이 10만 이상 주어진다면 해당 방법으로는 풀 수 없음.

'Algorithm' 카테고리의 다른 글

백준_행성연결_16398_Prim  (0) 2021.01.07
백준_가장 긴 증가하는 부분수열2_12015  (0) 2021.01.06
백준_오목_2615  (0) 2021.01.04
프로그래머스_가장 먼 노드  (0) 2021.01.03
프로그래머스_카펫  (0) 2020.12.31
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG more
«   2025/08   »
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 29 30
31
글 보관함