꾸물꾸물 졔의 개발공부
[백준] 11053 가장 긴 증가하는 부분 수열 본문
https://www.acmicpc.net/problem/11053
11053번: 가장 긴 증가하는 부분 수열
수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이
www.acmicpc.net
dp 복습시간.. dp 왜어려워..
[풀이]
- 현재 탐색중인 값 기준으로 더 작은 값들 중 가장 큰 dp값 +1
- 예를 들어 탐색하는 값이 30이라면, 앞의 수 중 30보다 작은 수들의 dp값 중 max+1
- 최종적으로 0~n-1의 dp 값 중 가장 큰 값 출력
[소스코드]
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws Exception{
BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
int n= Integer.parseInt(br.readLine());
int[] arr= new int[n];
int[] dp = new int[n];
StringTokenizer st= new StringTokenizer(br.readLine(), " ");
for(int i=0; i<n; i++) arr[i]= Integer.parseInt(st.nextToken());
dp[0]=1;
int max;
for(int i=1; i<n; i++) {
max=0;
for(int j=0; j<i; j++) {
if(arr[j] < arr[i]) max=Math.max(dp[j], max);
}
dp[i]= max+1;
}
max= 0;
for(int i=0; i<n; i++) {
max =Math.max(max, dp[i]);
}
System.out.println(max);
}//end of main
}//end of class
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 1522 문자열 교환 (0) | 2023.10.24 |
---|---|
[백준] 20437 문자열 게임 2 - JAVA (0) | 2023.09.25 |
[백준] 18428 감시 피하기 - JAVA (0) | 2023.09.22 |
[백준] 2668 숫자고르기 - JAVA (0) | 2023.09.22 |
[백준] 20055 컨베이어 벨트 위의 로봇 - JAVA (0) | 2023.09.11 |