연권
달콘박스
연권
전체 방문자
오늘
어제
  • 전체 (308)
    • Web (22)
      • JavaScript (8)
      • TypeScript (2)
      • Node.js (8)
      • HTML (0)
      • CSS (0)
      • Network (1)
      • Browser (0)
      • Patterns (3)
    • Framwork (4)
      • Vue.js (3)
      • Electron (1)
    • Infra&DevOps (1)
    • Algorithm (246)
    • Database (16)
    • Review (15)
    • Test (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 정렬
  • 코딩테스트 연습
  • 재귀
  • 동적계획법
  • java
  • sql
  • 알고리즘
  • 문자열
  • DP
  • 진수
  • 진법
  • BFS
  • MySQL
  • 백트레킹
  • javascript
  • 백준ㅇ
  • typescript
  • 백준
  • 스택
  • 프로그래머스

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
연권

달콘박스

Algorithm

백준 14002번 가장 긴 증가하는 부분 수열 4 [ Java ]

2021. 4. 4. 22:04
반응형
 

14002번: 가장 긴 증가하는 부분 수열 4

수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이

www.acmicpc.net

가장 긴 증가하는 부분 수열 문제에서

DP결과를 저장하면서 저장하게 되는 결과가 나오게 근거 인덱스를 따로 만들어 저장합니다.

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

        int N = Integer.parseInt(br.readLine());
        int[] A = Arrays.stream(br.readLine().split(" "))
                .mapToInt(Integer::parseInt)
                .toArray();
        int[] D = new int[N];
        int[] V = new int[N];
        int max = 1;
        Arrays.fill(D, 1);
        Arrays.fill(V, -1);
        for (int i = 0; i < N; i++)
            for (int j = 0; j < i; j++)
                if (A[j] < A[i] && D[i] < D[j] + 1) {
                    D[i] = D[j] + 1;
                    V[i] = j;
                }
        int idx = 0;
        for (int i = 0; i < N; i++)
            if (D[i] > max) {
                max = D[i];
                idx = i;
            }
        while (idx != -1) {
            sb.insert(0, A[idx] + " ");
            idx = V[idx];
        }
        System.out.println(max);
        System.out.print(sb);
    }
}

 

반응형
저작자표시 동일조건 (새창열림)

'Algorithm' 카테고리의 다른 글

백준 1271번 엄청난 부자2 [ Python ]  (0) 2021.04.08
백준 1912번 연속합 [ Java ]  (0) 2021.04.04
백준 11053번 가장 긴 증가하는 부분 수열 [ Java ]  (0) 2021.04.04
백준 2193번 이친수 [ Java ]  (0) 2021.04.03
백준 15990번 1, 2, 3 더하기 5 [ Java ]  (0) 2021.04.02
    'Algorithm' 카테고리의 다른 글
    • 백준 1271번 엄청난 부자2 [ Python ]
    • 백준 1912번 연속합 [ Java ]
    • 백준 11053번 가장 긴 증가하는 부분 수열 [ Java ]
    • 백준 2193번 이친수 [ Java ]
    연권
    연권

    티스토리툴바