https://www.acmicpc.net/problem/11053
예제) n=6, A=[10, 20, 10, 30, 20, 50] -> 길이 4
처음에 리스트 초기화 d=[1, 1, 1, 1, 1, 1]
for문을 돌면서 차례대로 각 인덱스까지의 입력받은 배열 값을 비교해서 더 크면 최댓값 +1
1.
10 | 20 | 10 | 30 | 20 | 50 |
1 | 1 | 1 | 1 | 1 | 1 |
2. 10 < 20 이므로 d[1] = max(d[0]) + 1
10 | 20 | 10 | 30 | 20 | 50 |
1 | 2 | 1 | 1 | 1 | 1 |
3. 10 < 30 이므로 d[3] = max(d[0], d[1], d[2]) + 1 = d[2] + 1
10 | 20 | 10 | 30 | 20 | 50 |
1 | 2 | 1 | 3 | 1 | 1 |
4. 같은 방법으로 ~~ 하면 이런 배열이 완성된다
10 | 20 | 10 | 30 | 20 | 50 |
1 | 2 | 1 | 3 | 2 | 4 |
최종값은 최댓값 출력하기!
n = int(input())
a = list(map(int, input().split()))
d = [1] * n
for i in range(1, n):
for j in range(i):
if a[j] < a[i]:
d[i] = max(d[i], d[j] + 1)
print(max(d))
'알고리즘 > 백준' 카테고리의 다른 글
백준 12865: 평범한 배낭 (Python) (0) | 2022.04.11 |
---|---|
백준 1912: 연속합 (Python) (0) | 2022.04.08 |
백준 2156: 포도주 시식 (Python) (0) | 2022.04.07 |
백준 10844: 쉬운 계단 수 (Python) (0) | 2022.04.07 |
백준 1463: 1로 만들기 (Python) (0) | 2022.04.05 |