백준 11055 가장 큰 증가 부분 수열 (Java,자바)

jonghyukLee·2022년 3월 14일
0

이번에 풀어본 문제는
백준 11055번 가장 큰 증가 부분 수열 입니다.

📕 문제 링크

❗️코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    static int N;
    static int [] dp,map;
    static int max_value = Integer.MIN_VALUE;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        N = Integer.parseInt(br.readLine());

        dp = new int[N];
        map = new int[N];

        StringTokenizer st = new StringTokenizer(br.readLine());

        for(int i = 0; i < N; ++i)
        {
            int cur = Integer.parseInt(st.nextToken());
            map[i] = cur;
            dp[i] = cur;
            int tmp = 0;
            for(int j = 0; j < i; ++j)
            {
                if(cur > map[j])
                {
                    tmp = Math.max(tmp,dp[j]);
                }
            }
            dp[i] += tmp;
            max_value = Math.max(max_value,dp[i]);
        }
        System.out.print(max_value);
    }
}

📝 풀이

주어진 N길이의 수열에서, 증가하는 수열이면서 합이 최대인 부분수열의 합을 출력하는 문제입니다. 1차원 dp배열을 활용하여, 현재 입력된 값보다 작으면서, dp에 누적된 합이 가장 큰 인덱스를 찾아, 현재 dp값을 갱신해주면 됩니다.
최종 탐색을 생략하기 위해 매 반복마다 max_value를 갱신해주어 최댓값을 담아, 마지막에 출력하도록 해보았습니다.

📜 후기

앞서 의도와 다르게 bfs문제를 풀어버려서, 다른 dp문제를 풀어보았습니다.
이런 문제보다는 점화식을 구해야하는 dp문제에 취약한 것 같아요ㅠ 제가 어렵게 느끼는 유형의 문제를 찾아 다시 풀어볼 생각입니다.

profile
머무르지 않기!

0개의 댓글