728x90
문제출처: https://www.acmicpc.net/problem/11722
11722번: 가장 긴 감소하는 부분 수열
수열 A가 주어졌을 때, 가장 긴 감소하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 30, 10, 20, 20, 10} 인 경우에 가장 긴 감소하는 부분 수열은 A = {10, 30, 10, 20, 20, 10}
www.acmicpc.net
1. 코드
1
2
3
4
5
6
7
8
9
10
11
|
n = int(input())
arr=list(map(int, input().split()))
dp=[1]*n
for i in range(n):
for j in range(i):
if arr[j] > arr[i]:
dp[i]= max(dp[i],dp[j]+1)
print(max(dp))
|
cs |
2. 해결과정
arr 안의 수에 대해서 가장 긴 감소하는 부분 수열의 길이를 구해주면 되는 문제이다.
arr를 하나씩 돌면서 자신보다 앞의 숫자와 비교한다.
1) 자신보다 앞의 숫자가 큰 경우 : 나와 앞의 숫자는 감소하는 부분 수열
-> 앞 숫자의 부분수열의 길이에 1을 더해주면 자신의 부분 수열 값이 나온다.
각 숫자에서 가장 긴 숫자를 dp에 저장
dp의 max값을 출력해준다.
728x90
'공부 자료 > 알고리즘' 카테고리의 다른 글
(Python/파이썬) 백준 9012번 - 괄호 (0) | 2021.08.09 |
---|---|
(Python/파이썬) 백준 2579번 - 계단 오르기 (0) | 2021.08.09 |
(Python/파이썬) 백준 11048번 - 이동하기 (0) | 2021.08.09 |
(Python/파이썬) 백준 1120번 - 문자열 (0) | 2021.08.06 |
(Python/파이썬) 백준 1292번 - 쉽게 푸는 문제 (0) | 2021.08.06 |