기몽수
코딩 기록일지
기몽수
전체 방문자
오늘
어제
  • 분류 전체보기 (443)
    • 알고리즘 - SWEA (210)
      • D1 (19)
      • D2 (25)
      • D3 (143)
      • D4 (21)
      • D5 (2)
    • 알고리즘 - Programmers (74)
      • Unrated (34)
      • Lv 0 (4)
      • Lv 1 (3)
      • Lv 2 (32)
      • Lv 3 (1)
    • 알고리즘 - Baekjoon (158)
      • Bronze (1)
      • Silver (65)
      • Gold (90)
      • Platinum (2)
    • 취업 (0)
    • SSAFY (1)
hELLO · Designed By 김용수.
기몽수

코딩 기록일지

알고리즘 - Baekjoon/Silver

[백준] 11722번 : 가장 긴 감소하는 부분 수열 Silver2(실버2) - JAVA[자바]

2023. 11. 24. 09:46

[Silver II] 가장 긴 감소하는 부분 수열 - 11722

문제 링크

성능 요약

메모리: 12280 KB, 시간: 104 ms

분류

다이나믹 프로그래밍

제출 일자

2023년 11월 24일 09:38:05

문제 설명

수열 A가 주어졌을 때, 가장 긴 감소하는 부분 수열을 구하는 프로그램을 작성하시오.

예를 들어, 수열 A = {10, 30, 10, 20, 20, 10} 인 경우에 가장 긴 감소하는 부분 수열은 A = {10, 30, 10, 20, 20, 10} 이고, 길이는 3이다.

입력

첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000)이 주어진다.

둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ Ai ≤ 1,000)

출력

첫째 줄에 수열 A의 가장 긴 감소하는 부분 수열의 길이를 출력한다.

 

dp 0 10 30 10 20 20 10
D 0 1 1 2 2 2 3
A 0 10 30 10 20 20 10

 

1. 이전에 있었던 자신보다 큰 Arr값 중 D값이 가장 큰 걸 가져온다.

2.. 그 후 자신의 D값을 Val + 1로 해준다.

3. 그 중 최대값이 정답

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n =Integer.parseInt(br.readLine());
        int[] arr = new int[n+1];
        int result = 0;
        StringTokenizer st = new StringTokenizer(br.readLine());
        for(int i = 1; i <= n ;i++){
            arr[i] = Integer.parseInt(st.nextToken());
        }
        int[] dp = new int[n+1];
        for(int i = 1; i <= n ;i++){
            int val = 0;
            for(int j = 0; j < i; j++){
            	// 자신보다 큰 arr 값중 dp값이 최대인 걸 찾음
                if(arr[j] > arr[i] && dp[j] > val){
                    val = dp[j];
                }
            }
            // 최대인 Dp값에 현재 Index값을 포함하기 위해 + 1
            dp[i] = val + 1;
            // 최대값을 연산 과정에서 찾기 위해서 Max값을 찾는 연산 추가
            result = Math.max(dp[i],result);
        }
        System.out.println(result);

    }
}

'알고리즘 - Baekjoon > Silver' 카테고리의 다른 글

[백준] 11004번 : K번째 수 Silver5(실버 5) - JAVA[자바]  (0) 2023.11.24
[백준] 11652번 : 카드 Silver4(실버4) - JAVA[자바]  (0) 2023.11.24
[백준] 24511번 : queuestack Silver3(실버 3) - JAVA[자바]  (1) 2023.11.23
[백준] 2346번 : 풍선 터뜨리기 Silver3(실버3) - JAVA[자바]  (1) 2023.11.23
[백준] 28279번 : 덱2 Silver 4(실버4) - JAVA[자바]  (0) 2023.11.23
    '알고리즘 - Baekjoon/Silver' 카테고리의 다른 글
    • [백준] 11004번 : K번째 수 Silver5(실버 5) - JAVA[자바]
    • [백준] 11652번 : 카드 Silver4(실버4) - JAVA[자바]
    • [백준] 24511번 : queuestack Silver3(실버 3) - JAVA[자바]
    • [백준] 2346번 : 풍선 터뜨리기 Silver3(실버3) - JAVA[자바]
    기몽수
    기몽수

    티스토리툴바