[SWEA] 3307. 최장 증가 부분 수열

김휴지 ㅣ 2023. 5. 18. 03:15

https://swexpertacademy.com/main/code/problem/problemDetail.do

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


접근 방법

DP로 풀었다. N+1 크기의 숫자 배열과 N+1 크기의 DP 배열을 사용했다.

왼쪽부터 차례로, 해당 값이 왼쪽 값보다 클 경우 해당 값의 DP와 왼쪽 값의 DP+1 중 더 큰 값을 해당 값의 DP에 저장했다.

숫자 배열의 처음 값은 0이므로 단번에 해당 값을 포함할 때의 최대 길이를 저장할 수 있다.

그래서 매번 전체 최대 길이도 갱신했다.

 

소스 코드

import java.util.*;
import java.io.*;
 
class Solution {
    static int[] dp;
    static int[] num;
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
         
        int T = sc.nextInt();
        for(int t=1; t<=T; t++) {
            int N = sc.nextInt();
            dp = new int[N+1];
            num = new int[N+1];
             
            for(int i=1; i<=N; i++)
                num[i] = sc.nextInt();
             
            int val = 0;
            for(int i=0; i<=N; i++) {
                for(int j=0; j<i; j++) {
                    if(num[i] > num[j]) {
                        dp[i] = Math.max(dp[i], dp[j]+1);
                        if(val < dp[i])
                            val = dp[i];
                    }
                }
            }
            System.out.println("#" + t + " " + val);
        }
    }
}

'코테 > 자바' 카테고리의 다른 글

[SWEA] 5215. 햄버거 다이어트  (0) 2023.05.18
[SWEA] 3750. Digit sum  (0) 2023.05.18
[SWEA] 4615. 재미있는 오셀로 게임  (0) 2023.05.18
[SWEA] 1226. 미로1  (0) 2023.05.18
[SWEA] 2817. 부분 수열의 합  (0) 2023.05.18