n^2의 시간복잡도를 갖는 코드.

 

C++

#include <vector>
#include <iostream>
#include <algorithm>

using namespace std;
int n;
vector<int> arr;
vector<int> dp;

bool comp;

int solution() {
    for(int i=0; i<n; i++){
        for(int j=0; j<i; j++){
            if(arr[i]> arr[j]){
                dp[i] = max(dp[i], dp[j]+1);
            }
        }
    }
    sort(dp.begin(), dp.end());
    return dp[n-1];
}

int main(){
    scanf("%d", &n);
    int element;
    for(int i=0; i<n; i++){
        cin >> element;
        arr.push_back(element);
        dp.push_back(1);
    }
    printf("%d\n", solution());
}

 

 

python

x = int(input())

arr = list(map(int, input().split())) #input을 slice해서 list에 담기

dp = [1 for i in range(x)] # dp 배열 생성

for i in range(x):
    for j in range(i):
        if arr[i] > arr[j]:
            dp[i] = max(dp[i], dp[j]+1)

print(max(dp))

'알고리즘 > 백준' 카테고리의 다른 글

[C++/1932] 정수 삼각형  (0) 2021.09.05
[11650/C++] 좌표 정렬하기  (0) 2021.08.22