백준

백준 1965 상자넣기, c++

2024. 3. 9. 17:05

 

 

 

처음 작성한 코드는 다음과 같다.

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