개발바닥

BOJ_11053 [ 가장 긴 증가하는 부분 수열 ] [ 파이썬 ] 본문

[ Algorithm ]/[ PYTHON ]

BOJ_11053 [ 가장 긴 증가하는 부분 수열 ] [ 파이썬 ]

라이언 2020. 5. 21. 11:15
반응형

문제

https://www.acmicpc.net/problem/11053

 

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

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

www.acmicpc.net

문제 해결 방법

다이나믹 프로그래밍으로 접근해서 문제를 해결해야 된다.

Bottom - up 방식으로

해당 조건을 만족시킬 때 값을 업데이트 해주면 된다.

현재 인덱스를 기준으로 기존 인덱스 중에서 dp 값이 크고 배열에 저장된 인덱스 값보다 작다면 dp 값을 갱신해준다.

 

if dp[현재인덱스] < dp[기존인덱스] and arr[현재인덱스] > arr[기존인덱스]

   dp[현재인덱스] = dp[기존인덱스]

 

소스 코드 보기

https://github.com/jokerKwu/BOJ_Algorithm/blob/master/python/BOJ_11053.py

 

jokerKwu/BOJ_Algorithm

Contribute to jokerKwu/BOJ_Algorithm development by creating an account on GitHub.

github.com

import sys

n = int(sys.stdin.readline())
arr = list(map(int, sys.stdin.readline().split()))
dp = [0 for i in range(n)]
dp[0] = 1
for i in range(1, n):
    for j in range(i):
        if dp[i] < dp[j] and arr[i] > arr[j]:
            dp[i] = dp[j]
    dp[i] += 1

print(max(dp))
반응형
Comments