11053번: 가장 긴 증가하는 부분 수열
수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이
www.acmicpc.net
논리
- 주어진 문자열을 seq라고 할 때 seq[i]까지의 lis[i]를 기록해놓는다
- i < j 인 seq[j]로 끝나는 lis 길이를 알기 위해 이전까지의 lis[i](i < j)를 참고한다
- 이때, seq[i] < seq[j]라면 lis[j] = max(lis[j], lis[i]+1)로 계속 갱신한다
코드
import sys
def LIS():
# inputs
N = int(sys.stdin.readline())
seq = list(map(int, sys.stdin.readline().split()))
lis = [1] * N # table[i]: series[i]로 끝나는 LIS 길이
for i in range(N):
for j in range(i):
if seq[j] < seq[i]:
lis[i] = max(lis[i], lis[j] + 1)
print(max(lis))
return
LIS()
'dev > 알고리즘문제풀이' 카테고리의 다른 글
[ 백준 11049번 ] 행렬 곱셈 순서 파이썬 (1) | 2021.09.01 |
---|---|
[ 백준 9251번 ] LCS 파이썬 (0) | 2021.09.01 |
[ 백준 2573번 ] 빙산 파이썬 (0) | 2021.08.25 |
[ 백준 2623번 ] 음악프로그램 파이썬 (1) | 2021.08.25 |
[ 백준 11725번] 트리의 부모 찾기 파이썬 (1) | 2021.08.24 |