![[BOJ] 백준 11053 가장 긴 증가하는 부분 수열 Python](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlPRAp%2FbtsDkuPMdjR%2Fi0af8sOqZ4uXnG1uIs9JWk%2Fimg.png)
[BOJ] 백준 11053 가장 긴 증가하는 부분 수열 Python알고리즘 & 코테2024. 1. 11. 11:14
Table of Contents
11053번: 가장 긴 증가하는 부분 수열
수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이
www.acmicpc.net
문제풀이
N <= 1000 (N은 자연수)의 조건을 보고 시간복잡도상 2중 for문을 사용할 수 있는 것을 알았다.
경우의 수가 너무 많기에 DP로 푸는 문제임을 직관적으로 알 수 있었고 인덱스가 증가함에 따라 값이 증가해서 부분수열의 길이가 늘어나야한다면 현재까지의 부분수열의 길이와 이전 상황들에 대한 부분수열의 길이를 비교해서 더 큰 값을 현재까지의 부분수열의 길이로 정할 수 있다.
따라서 점화식은 아래와 같다.
if A[j] < A[i]: dp[i] = max(dp[i], dp[j] + 1)
Code
from sys import stdin
input = stdin.readline
def solve():
N = int(input())
A = list(map(int, input().split()))
dp = [1] * N
for i in range(1, N):
for j in range(i):
if A[j] < A[i]:
dp[i] = max(dp[i], dp[j] + 1)
print(max(dp))
solve()
'알고리즘 & 코테' 카테고리의 다른 글
[BOJ] 백준 2075 N번째 큰 수 Python (1) | 2024.03.06 |
---|---|
[BOJ] 백준 9251 LCS Python (1) | 2024.01.11 |
[BOJ] 백준 2225 합분해 Python (0) | 2024.01.10 |
[BOJ] 백준 2293 동전 1 Python (1) | 2024.01.10 |
[BOJ] 백준 11726 2xn 타일링 Python (0) | 2024.01.09 |
@Indigochi1d :: Indigochi1d's Commit Log
안녕하세요? 개발자입니다.