읽기 전
- 불필요한 코드나 잘못 작성된 내용에 대한 지적은 언제나 환영합니다.
- 개인적으로 배운 점을 정리한 글입니다.
문제 링크
문제 풀이
LIS 문제 중 DP를 사용해 해결하는 가장 기초적인 문제다. 배열의 길이만큼 dp 배열을 생성해두고 i 번째 원소에 대해 최대 증가 수열의 값을 도출하면 dp의 max값이 정답이 된다.
- 초기값은 1로 설정
- i 번째는 i - 1 좌표까지의 원소들 중 자신보다 작으며 그 중 최대인 값 + 1이 된다.
- i번째 값이 산출되면 기존 최댓값과 비교, 갱신
- 순회가 모두 끝나고 최댓값 출력
python 코드
import sys input = sys.stdin.readline N = int(input()) nums = list(map(int, input().split())) max_v = 1 dp = [] for i in range(N): b = 0 for j in range(i): if nums[i] > nums[j]: b = max(b, dp[j]) dp.append(b + 1) max_v = max(max_v, dp[i]) print(max_v)
'Algorithms > Baekjoon' 카테고리의 다른 글
BOJ #11444 피보나치 수 6 (0) | 2021.07.28 |
---|---|
BOJ #12865 평범한 배낭 (0) | 2021.07.28 |
BOJ #10844 쉬운 계단 수 (0) | 2021.07.26 |
BOJ #2156 포도주 시식 (0) | 2021.07.26 |
BOJ #1463 1로 만들기 (0) | 2021.07.26 |