개발 블로그
article thumbnail

 

 

아이디어

i번째 숫자를 마지막으로 하는 부분 수열은 이전(1 ~ i - 1)에 만든 부분 수열에 i 번째 숫자를 이어붙임으로써 만들 수 있다.

 

dp[i] 를 i 번째 숫자를 마지막으로 하는 부분 수열 중 가장 긴 부분 수열의 길이라고 정의하면 아래와 같은 점화식을 세울 수 있다.

 

dp[i] = 1 ~ i - 1번째 숫자 중 i 번째 숫자보다 큰 경우에 대해 Math.max(dp[j] + 1, dp[i])

 

 

풀이코드

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 {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int N = Integer.parseInt(br.readLine());
        StringTokenizer st = new StringTokenizer(br.readLine());

        int[] A = new int[N];
        for (int i = 0; i < N; i++) {
            A[i] = Integer.parseInt(st.nextToken());
        }

        int[] dp = new int[N];
        int result = dp[0] = 1;

        for (int i = 1; i < N; i++) {
            dp[i] = 1;
            for (int j = 0; j < i; j++) {
                if (A[i] < A[j]) {
                    dp[i] = Math.max(dp[i], dp[j] + 1);
                }
            }
            result = Math.max(result, dp[i]);
        }

        System.out.println(result);
    }
}

'Algorithm > 백준 알고리즘' 카테고리의 다른 글

5639번. 이진 검색 트리  (1) 2023.12.17
13019번. A를 B로  (1) 2023.11.21
2644번. 촌수계산  (0) 2023.11.02
1946번. 신입 사원  (0) 2023.11.02
20152번. Game Addiction  (1) 2023.11.01
profile

개발 블로그

@하얀.손

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!