본문 바로가기
코딩테스트/프로그래머스

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

by 의정부핵꿀밤 2022. 5. 10.
728x90

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

 

11055번: 가장 큰 증가 부분 수열

수열 A가 주어졌을 때, 그 수열의 증가 부분 수열 중에서 합이 가장 큰 것을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {1, 100, 2, 50, 60, 3, 5, 6, 7, 8} 인 경우에 합이 가장 큰 증가 부분 수

www.acmicpc.net


dp...

dynamic programming...

분명 점화식 꽤나 잘 세웠던 나였는데...

몇개월 안했다고 바아로 까먹는 나였다...

이거 사실 어제 푼건데 지금 정리나 하려고 하핫

 

 

 

자바 코드)

import java.util.Scanner;

import static java.util.Collections.max;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int[] arr = new int[n];
        int[] dp = new int[n];

        for(int i=0;i<n;i++) {
            arr[i] = scanner.nextInt();
        }

        int max = 0;
        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] < dp[j] + arr[i]) {
                    dp[i] = dp[j] + arr[i];
                }
            }
            max = Math.max(max, dp[i]);
        }
        System.out.println(max);
    }
}

주요 코드는 이중 for문 안의 코드이다

각 배열원소의 증가부분수열의 합을 저장하는 배열인 dp와 숫자를 저장하는 배열인 arr을 이용한다

arr 원소가 이전 원소보다 크고, dp의 현재 원소보다 arr과 dp 더한 값이 더 크면 그걸 업데이트 하는 방식으로 구했다

음.. 사실 아리까리하긴 한데 비슷한 거 더 풀다보면 금방 할듯!!

728x90

'코딩테스트 > 프로그래머스' 카테고리의 다른 글

[완전탐색] 카펫 - JAVA  (0) 2022.05.12
[완전탐색] 소수 찾기 - JAVA  (0) 2022.05.12
[완전탐색] 모의고사 - JAVA  (0) 2022.04.30
[힙] 더 맵게 - JAVA  (0) 2022.04.29
[스택/큐] 주식가격 - JAVA  (0) 2022.04.28

댓글