Junior-Developer
Home
  • Category (316)
    • 문제풀이 (270)
      • 백준oj (201)
      • 프로그래머스 (53)
      • 명품 자바 프로그래밍(개정4판) (11)
      • 구름 (5)
    • 알고리즘 (6)
    • Node.js (2)
    • 체크리스트 (37)
블로그 내 검색
Home

Junior-Developer

1일 1커밋! 1일 1 백준!

  • 문제풀이/백준oj

    [백준OJ] 11055번 가장 큰 증가 부분 수열

    2021. 7. 5.

    by. Hyeon-Uk

    반응형

    https://www.acmicpc.net/problem/11055


     

    -풀이-

    DP를 이용하여 풀었다.

    dp[i]=k 는 i번째 원소까지 증가하는 부분수열의 합중 가장 큰값이 k라는 의미이다.

    N의 값이 1000이하이기 때문에 2중반복문을 사용했다.

     

    dp[i]의 값을 구하기 위해선, 0~ i-1 까지의 dp값중, i번째 원소보다 해당 인덱스의 원소값이 작으면서, dp값이 가장 큰 값을 찾아 i번째 원소와 더해주면 된다.

    그런뒤, dp배열을 정렬해서 , 가장 큰 값을 찾아주면된다.

     

    -시간복잡도-

    이중반복문이므로 O(N2)이 된다.

     

    -코드-

    #include <algorithm>
    #include<iostream>
    using namespace std;
    
    int arr[1001];
    int dp[1001]={0};
    
    int main(){
        int n,result=0;
        cin>>n;
        for(int i=0;i<n;i++){
            cin>>arr[i];
        }
        
        for(int i=0;i<n;i++){
            dp[i]=arr[i];
            
            for(int j=0;j<=i;j++){
                if(arr[i]>arr[j]){
                    dp[i]=max(dp[i],dp[j]+arr[i]);
                }
            }
        }
        sort(dp,dp+n);
        cout<<dp[n-1];
    }
    반응형
    저작자표시 (새창열림)

    '문제풀이 > 백준oj' 카테고리의 다른 글

    [백준OJ] 1744번 수 묶기  (0) 2021.07.06
    [백준OJ] 11722번 가장 긴 감소하는 부분 수열  (0) 2021.07.06
    [백준OJ] 2293번 동전 1  (0) 2021.07.04
    [백준OJ] 4796번 캠핑  (0) 2021.07.03
    [백준OJ] 1535번 안녕  (0) 2021.07.03

    댓글

    관련글

    • [백준OJ] 1744번 수 묶기 2021.07.06
    • [백준OJ] 11722번 가장 긴 감소하는 부분 수열 2021.07.06
    • [백준OJ] 2293번 동전 1 2021.07.04
    • [백준OJ] 4796번 캠핑 2021.07.03
    맨 위로
전체 글 보기
Tistory 로그인
Tistory 로그아웃
로그아웃 글쓰기 관리

Today

Total

Powered by ⓒ Kakao Corp.

Designed by Nana
블로그 이미지
Hyeon-Uk

티스토리툴바