LIS(Longest Increasing Subsequence)는 주어진 수열에서 증가하는 부분 수열 중 가장 긴 길이를 찾는 문제입니다. 이때, 증가하는 부분 수열이란 수열에서 원소의 순서를 유지하면서 일부 원소를 선택한 부분 수열을 말합니다. LIS 문제는 동적 계획법(Dynamic Programming)을 활용하여 효율적으로 해결할 수 있습니다.
LIS 문제의 주요 아이디어:
LIS의 활용 예시:
파이썬 코드를 통해 LIS를 예시로 살펴보겠습니다. 다음은 주어진 수열에서 LIS 길이를 구하는 동적 계획법(LIS DP) 코드입니다.
def lis_length(arr):
n = len(arr)
lis = [1] * n # DP 테이블 초기화
for i in range(1, n):
for j in range(i):
if arr[i] > arr[j]:
lis[i] = max(lis[i], lis[j] + 1)
return max(lis)
# 주어진 수열
sequence = [10, 22, 9, 33, 21, 50, 41, 60, 80]
length = lis_length(sequence)
print("LIS의 길이:", length)
이 코드는 주어진 수열에서 LIS의 길이를 구하는 예시입니다. DP 테이블을 이용하여 각 위치에서 가장 긴 LIS 길이를 계산하고, 최종적으로 그 중 가장 큰 값을 선택합니다.