Algorithm/📊 Problem Solving

[백준/BOJ] 11053 - 가장 긴 증가하는 부분 수열

posted by sangmin

11053 - 가장 긴 증가하는 부분 수열

📌 문제

수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오.

예를 들어, 수열 A = 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이고, 길이는 4이다.

📋 코드

N = int(input())
arr = list(map(int, input().split()))

dp = [1] * N
for i in range(N):
    for j in range(i+1, N):
        if arr[i] < arr[j]:
            dp[j] = max(dp[j], dp[i] + 1)

print(max(dp))

💡 한마디

이 문제는 LIS (Longest Increasing Subsequence), 즉 최장 증가 수열로 유명한 알고리즘이다. DP 테이블을 만들어서 뒤에 있는 값이 앞에 있는 값보다 큰 경우에만 테이블을 갱신해주면 된다.

 

11053번: 가장 긴 증가하는 부분 수열

수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이

www.acmicpc.net