슈콩

[BOJ] 백준 14002 가장 긴 증가하는 부분 수열 4 본문

Algorithms/Baekjoon

[BOJ] 백준 14002 가장 긴 증가하는 부분 수열 4

shukong 2025. 8. 22. 21:36

[문제]

https://www.acmicpc.net/problem/14002

 

 

[소스 코드]

import java.io.*;
import java.util.*;
public class Main {
    public static void main(String[] args) throws IOException {
    	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    	StringTokenizer st;
    	int n = Integer.parseInt(br.readLine());
    	int[] arr = new int[n+1];
    	st = new StringTokenizer(br.readLine());
    	for(int i=1;i<=n;i++) {
    		arr[i] = Integer.parseInt(st.nextToken());
    	}
    	int[] dp = new int[n+1];
    	int[] prev = new int[n+1];
    	for(int i=1;i<=n;i++) dp[i] = 1;
    	
    	for(int i=2;i<=n;i++) {
    		for(int j=1;j<i;j++) {
    			if(arr[j]<arr[i] && dp[i]<dp[j]+1) {
    				dp[i] = dp[j] + 1;
    				prev[i] = j;
    			}
    		}
    	}
    	int max = 0;
    	int idx = 0;
    	for(int i=1;i<=n;i++) {
    		if(max<dp[i]) {
    			max = dp[i];
    			idx = i;
    		}
    	}
    	System.out.println(max);
    	int[] nums = new int[max];
    	for(int i=0;i<max;i++) {
    		nums[i] = arr[idx];
    		idx = prev[idx];
    	}
    	Arrays.sort(nums);
    	for(int num : nums) {
    		System.out.print(num + " ");
    	}
    }
}

'Algorithms > Baekjoon' 카테고리의 다른 글

[BOJ] 백준 1520 내리막  (0) 2025.08.23
[BOJ] 백준 14501 퇴사  (2) 2025.08.23
[BOJ] 백준 11727 2xn 타일링 2  (0) 2025.08.22
[BOJ] 백준 11660 구간 합 구하기 5  (0) 2025.08.22
[BOJ] 백준 11057 오르막 수  (0) 2025.08.22