- toc {:toc}
풀이
O(N^2) 의 방식으로 풀이했다. for 문을 두 번 사용했다.
타깃값 arr[i] 를 설정해서 i 이전의 값들 arr[j] 과 비교한다. 만약 타겟값이 더 크다면 증가하는 수열이 만들어진 상황이다. 즉, dp[j]에서 1을 더해 dp[i]에 저장하여 갱신해줘야 한다. 하지만 dp[i] 가 이미 만들어져 있는 상황이라면 dp[j]+1과 dp[i]를 비교해 최대 수열을 갱신한다.
#include <bits/stdc++.h>
using namespace std;
int arr[1004], dp[1004];
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
int n, res = 0;
cin >> n;
for(int i = 0; i < n; i++){
cin >> arr[i];
}
fill(dp, dp+n, 1);
for(int i = 0; i < n; i++){
for(int j = 0; j < i; j++){
if(arr[j] < arr[i]) dp[i] = max(dp[i], dp[j]+1);
}
}
for(int i = 0; i < n; i++){
if (res < dp[i]) res = dp[i];
}
cout << res << '\n';
return 0;
}