처음 작성한 코드는 다음과 같다.
dp를 사용하는 문제였다.
간단한 예제는 맞게 출력했으나, 틀렸다는 결과가 나왔다.
#include <iostream>
using namespace std;
int main(){
int n;
cin >> n;
int arr[n+1];
for(int i=1; i<=n; i++)
cin >> arr[i];
int dp[1001] = {0,};
dp[1] = 1;
for(int i=2; i<=n; i++) {
for(int j=1; j<i; j++) {
if( (dp[j]<dp[i]) || (arr[j]<arr[i]) ) {
dp[i] = dp[j]+1;
}
}
}
cout << dp[n];
return 0;
}
수정한 코드는 다음과 같다.
수정할 부분은 두가지였다.
1. for문안에 if문에서 dp에 대한 조건 조금 바꾸기.
2. dp값 매번 비교하면서 가장 큰 max값을 찾아 출력해야 함.
#include <iostream>
using namespace std;
int main(){
int n;
cin >> n;
int arr[1001];
for(int i=1; i<=n; i++)
cin >> arr[i];
int dp[1001];
int max = 0;
for(int i=1; i<=n; i++) {
dp[i] = 1;
for(int j=1; j<i; j++) {
if( (dp[i]<dp[j]+1) && (arr[j]<arr[i]) )
dp[i] = dp[j]+1;
}
if(max < dp[i])
max = dp[i];
}
cout << max;
return 0;
}
'백준' 카테고리의 다른 글
백준 11727 2xn 타일링 2, c++ (0) | 2024.03.10 |
---|---|
백준 2579 계단 오르기, c++ (0) | 2024.03.09 |
백준 2290 LCD Test, c++ (0) | 2024.03.08 |
백준 16506 CPU, c++ (1) | 2024.03.07 |
백준 3568 iSharp, c++ (0) | 2024.03.07 |