Python/백준

11053_가장 긴 증가하는 수열

728x90

문제는 더보기!

 

더보기

문제

수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오.

예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이고, 길이는 4이다.

입력

첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000)이 주어진다.

둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ Ai ≤ 1,000)

출력

첫째 줄에 수열 A의 가장 긴 증가하는 부분 수열의 길이를 출력한다.

예제 입력 1 복사

6
10 20 10 30 20 50

예제 출력 1 복사

4

 

 

우선 가장 긴 증가하는 수열에대해 알아야 한다.

 

증가하는 부분수열이란, 수열의 부분수열중 오름차순으로 된것을 말한다. 그 중에서 가장 길이가 긴 수열을 구하면 된다.

 

https://namu.wiki/w/%EC%B5%9C%EC%9E%A5%20%EC%A6%9D%EA%B0%80%20%EB%B6%80%EB%B6%84%20%EC%88%98%EC%97%B4

 

이해가 잘 되지않는다면 위글을 한번 읽어보자.

 

 

이역시 10개의 입력이 들어온다면 첫번째부터 차례대로 계산을 해보면 된다.

 

예제로 준 10 20 10 30 20 50을 생각해보자.

 

첫번째 부터 채워넣는다면, 10은 한개이므로 1이 들어갈 것이다.

 

그 다음부터 구한 수열에서 자신보다 작은 수중 가장큰 수의 count +1값을 해나가면 된다.

 

N = int(input())
lst = list(map(int,input().split()))
result = [ 0 for _ in range(N) ]

for i in range(N):
    for j in range(i):
        if lst[i] > lst[j] and result[i] < result[j]:
            result[i] = result[j]
    result[i] +=1


print(max(result))
728x90

'Python > 백준' 카테고리의 다른 글

9251_LCS...반례?  (0) 2022.01.05
2565_전깃줄  (0) 2022.01.04
10844_쉬운계단수  (0) 2021.12.29
1463_1로만들기  (0) 2021.12.28
1932_정수 삼각형  (0) 2021.12.24