https://www.acmicpc.net/problem/11722
🌘문제 이해하기
- 가장 긴 감소하는 부분 수열 의 길이 구하기
🌗문제 자세히보기
가장 긴 감소하는 부분 수열 이란
: 주어진 수열에서 원소의 순서를 유지하면서 값이 점점 작아지는 가장 긴 부분 수열의 길이를 찾는 것 입니다.
예를들어 A의 배열이 있을때
A = {10,30,20,50,40,30,20}
가능한 감소하는 부분 수열은 아래의 경우와 같습니다.
- {30,20}
- {50,40}
- {50,40,30}
- {50,40,30,20}
이 중 가장 긴 수열의 길이는 4입니다.
- {50,40,30,20}
이것이 감소하는 부분 수열의 규칙입니다.
🌕최종코드
import java.util.*;
import java.io.*;
public class Main{
public static void main(String[] args) throws IOException
{
int answer = 1;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
ArrayList<Integer> result = new ArrayList<>();
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[i] = 1;
}
for(int i=0;i<n;i++) //기준값
{
for(int j=0;j<i;j++) //이전값
{
if(arr[j]>arr[i]) //감소되면
dp[i] = Math.max(dp[i],dp[j]+1);
}
answer = Math.max(answer, dp[i]);
}
System.out.println(answer);
}
}
'항해' 카테고리의 다른 글
[Day29]JAVA 백준 파도 수열(9461번) (0) | 2024.11.25 |
---|---|
[Day28]JAVA 백준 가장 큰 증가하는 부분 수열(11055번) (0) | 2024.11.24 |
[Day26]JAVA 백준 돌게임(9655번) (0) | 2024.11.22 |
[Day25]JAVA 백준 주사위쌓기(2116번) (0) | 2024.11.21 |
[Day24]JAVA 프로그래머스 전력망을 둘로 나누기(완전탐색 , DFS) (1) | 2024.11.20 |