Notice
Recent Posts
Recent Comments
Link
꾸준하게 거북이처럼
백준 11053번 파이썬 본문
11053번: 가장 긴 증가하는 부분 수열
수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이
www.acmicpc.net
가장 긴 증가 부분 수열을 찾는 것으로,
각 수열 요소보다 작은 요소들의 수열 길이 중 가장 큰 것 +1 을 하는 방식으로 문제를 풀 수 있다.
arr | 10 | 20 | 10 | 30 | 20 | 50 |
dp | 1 | 2 | 1 | 3 | 2 | 4 |
주어진 수열에서 증가수열 & 수열의 길이가 최대가 되어야한다.
그렇다면 dp를 이용해서 현재까지 가장 수열의 길이가 큰 것을 차근차근 구하고, 이를 배열에 저장한다. 현재 요소보다 작은 수들의 수열길이 중 최대 수열의 길이 +1 을 하는 방식으로 문제를 풀 수 있다.
n = int(input())
arr = list(map(int,input().split()))
dp = [0] * n
length = -1
dp[0] = 1
for i in range(1, n):
for k in range(i):
if arr[i] > arr[k]:
if dp[k] > dp[i]:
dp[i] = dp[k]
dp[i] += 1
print(max(dp))
'Algorithm 문제 & 공부 > DP' 카테고리의 다른 글
백준 2225번 - 파이썬 (0) | 2022.08.15 |
---|---|
백준 1699번 파이썬: 제곱수의 합 (0) | 2022.08.14 |
백준 10844번 파이썬 - 쉬운 계단 수 (0) | 2022.08.09 |
백준 15590 파이썬 - 1, 2, 3 더하기-5 (0) | 2022.08.08 |
백준 11052번 카드 구매하기 - 파이썬 (0) | 2022.08.06 |
Comments