728x90
▣ 출력설명
첫 줄에 겹치지 않고 그을 수 있는 최대선의 개수를 출력합니다.
▣ 입력예제 1
10
4 1 2 3 9 7 5 6 10 8
▣ 출력예제 1
6
n=int(input())
arr=list(map(int,input().split()))
dp=[0]*(n+1)
dp[1]=1
res=0
for i in range(2,n):
max=0
for j in range(i-1,0,-1):
if arr[j]<arr[i] and max<dp[j]:
max=dp[j]
dp[i]=max+1
if(res<dp[i]):
res=dp[i]
print(res)
정답풀이:부분수열의 갯수를 저장해주는 dp를 초기화 해주고 첫번째 인덱스 하나의 선만 가지니까
dp[1]=1 로 초기화를 시켜준다.
2중 for문을 사용하여 현재있는 인덱스의 값보다 작은 이전의 값을들 비교하고 dp의 값중 가장 큰 개수를 가진
dp를 max로 저장한다. dp[i]에 +=1 를 한다 dp중에 가장 긴 부분수열을 가진 res를 출력한다.
728x90
'코딩테스트 문제풀이' 카테고리의 다른 글
Python sort()에서의 key lambda 사용하기 (0) | 2023.02.15 |
---|---|
백준 숨바꼭질 BFS (0) | 2023.02.14 |
DP - Top-Down 방식과 Bottom-up (0) | 2023.02.14 |
[python3]2146번:다리만들기 (0) | 2023.02.13 |
집합의 표현 1717번 python (0) | 2023.02.05 |