논리
- 주어진 문자열을 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 |