알고리즘 문제풀이
백준 14002 파이썬 : 가장 긴 증가하는 부분 수열 4
dolchimdae
2022. 5. 5. 18:18
반응형
https://www.acmicpc.net/problem/14002
14002번: 가장 긴 증가하는 부분 수열 4
수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이
www.acmicpc.net
< 소스 코드 >
n= int(input())
array = list(map(int,input().split()))
dp = [1] * n
prev = [[]for i in range(n)]
for i in range(n):
for j in range(i):
if array[j] < array[i]:
dp[i] = max(dp[i],dp[j]+1)
x = max(dp)
print(x)
i = dp.index(x)
result = []
print("dp",dp)
##
for i in range(n-1,-1,-1):
if dp[i] == x:
result.append(array[i])
x -= 1
result.reverse()
print(*result)
< 출력 >
< 설명 >
dp 배열은 가장 긴 증가하는 수열의 크기를 값으로 갖는다.
array 를 돌면서 전체를 체크해, 현 요소보다 작은 값의 개수를 구해, dp 해당 위치에 반영한다.
dp 배열 중 최대값이 첫번째 답이고, dp 배열 끝부터 그 최대값과 같은 dp[] 값에 해당하는 array 요소를
추가하되... 수열 하나 구했으니 하나 뺀 값과 dp[] 값이 일치하는 array 요소를 구하면서...
전체 가장 긴 증가하는 수열의 요소들을 구한다. (두번째 답)
설명에 쏘울이 조금 부족한 것 같지만.... 최선을 다했다.🥹
반응형