읽기 전
- 불필요한 코드나 잘못 작성된 내용에 대한 지적은 언제나 환영합니다.
- 개인적으로 배운 점을 정리한 글입니다.
문제 링크
문제 풀이
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 |