백준
백준 11053 가장 긴 증가하는 부분 수열(Java)
Park DJ
2023. 2. 5. 22:18
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

해석 및 팁
이 문제를 풀려면 최장 증가 부분 수열(LIS)을 알아야 합니다. 자세한 내용은 링크를 참조하시기 바랍니다.
https://namu.wiki/w/최장%20증가%20부분%20수열
최장 증가 부분 수열 - 나무위키
어떤 임의의 수열이 주어질 때, 이 수열에서 몇 개의 수들을 제거해서 부분수열을 만들 수 있다. 이때 만들어진 부분수열 중 오름차순으로 정렬된 가장 긴 수열을 최장 증가 부분 수열이라 한다.
namu.wiki
개념을 이해하고 있으면 쉽게 풀리는 문제입니다.
Java 코드
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int max = -1;
int n = sc.nextInt();
int[] arr = new int[n];
int[] check = new int[n];
for(int i = 0; i < n; i++) {
arr[i] = sc.nextInt();
check[i] = 1;
}
for(int i = 0; i < n; i++) {
for(int j = 0; j < i; j++) {
if(arr[j] < arr[i] && check[i] <= check[j]) check[i] = check[j] + 1;
}
}
for(int i = 0; i < n; i++) max = Math.max(max, check[i]);
System.out.println(max);
}
}