K
KRYFT Problem Bank
알고리즘 보통 코딩

가장 긴 증가하는 부분 수열

배열에서 가장 긴 증가하는 부분 수열(LIS)의 길이를 구하는 문제

30분
100점
120개 테스트케이스
#3625

문제 설명

정수 배열 nums가 주어집니다. 가장 긴 순증가 부분 수열(Longest Increasing Subsequence)의 길이를 반환하세요.

부분 수열은 원래 배열의 원소 순서를 유지하면서 일부 원소를 삭제하여 얻을 수 있는 수열입니다.

입력 형식

첫째 줄에 배열의 크기 N이 주어집니다.

둘째 줄에 N개의 정수가 공백으로 구분되어 주어집니다.

출력 형식

가장 긴 증가하는 부분 수열의 길이를 출력합니다.

제약 조건

  • 1 ≤ N ≤ 2,500
  • -10^4 ≤ nums[i] ≤ 10^4

힌트

O(n²) 동적 프로그래밍 또는 O(n log n) 이진 탐색 방법을 사용할 수 있습니다.

예제 테스트케이스

예제 1 [2,3,7,101] 또는 [2,3,7,18]
입력
8
10 9 2 5 3 7 101 18
출력
4
예제 2 [0,1,2,3]
입력
4
0 1 0 3 2 3
출력
4
예제 3 원소가 하나면 LIS 길이는 1
입력
1
7
출력
1

힌트

실행 버튼을 눌러 코드를 실행하세요.