[알고리즘/파이썬] 백준 11053번 - 가장 긴 증가하는 부분 수열
2020. 7. 27. 22:04ㆍ개발/알고리즘
{ 1, 2, 1, 4, 3, 2 }라는 순열이 있을때 구할수 있는 증가 부분 수열이 몇가지 존재한다.
예를들면 [1 2] , [1 4], [1 2 3] , [1 2 4] 같은것들이다. 좌측부터 수를 뽑되(순열) 반드시 증가해야하며(증가) 주어진 순열내에 있는 숫자(주어진 순열의 부분)로 이뤄져있다.
위의 예시같은 경우는 3이 가장긴 부분 수열이다. ( [1 2 3] 또는 [ 1 2 4 ]인 경우 )
n = input()
# 입력받기
n_list = list(map(int,input().split()))
# 순열중 가장 좌측값을 ans에 넣는다.
ans = [n_list[0]]
# n_list의 1번째 ~ 마지막 인덱스
for i in range(1,len(n_list)):
# ans의 마지막값보다 n_list[i] 값이 크면 ans에 넣는다.
if ans[-1] < n_list[i]:
ans.append(n_list[i])
# ans의 마지막값보다 n_list[i]값이 작은 경우...
else:
# n_list[i]가 이미 ans에 있다면 pass
if n_list[i] in ans:
continue
ans_len = len(ans)
# ans를 순회한다.
for j in range(0,ans_len):
# ans를 순회하다가 n_list[i]보다 큰값이 나오면
# n_list[i]와 바꿔치기 하고 순회종료
if ans[j] > n_list[i]:
ans[j] = n_list[i]
break
print(len(ans))
'개발 > 알고리즘' 카테고리의 다른 글
[알고리즘/파이썬] 백준 2609번 - 최대공약수와 최소공배수 (0) | 2020.09.06 |
---|---|
[알고리즘/파이썬] 백준 2607번 - 비슷한 단어 (0) | 2020.09.01 |
[알고리즘/자바] 프로그래머스 - 베스트 앨범 (0) | 2020.07.21 |
[알고리즘/자바] 프로그래머스 - 프린터 (0) | 2020.07.20 |
[알고리즘/자바] 프로그래머스 - 이상한 문자 만들기 (0) | 2020.07.19 |