[JAVA] 백준 다이나믹 프로그래밍 연습문제 - BOJ 14002

2021. 7. 18. 19:03·Coding Test(Algorithms)
반응형

주어진 수열 내에서 증가하는 부분수열 LIS 중 최대길이와 그 수열 구하기

 

- 주어진 수열 a[]와 수열의 i번째 수까지의 LIS 최대길이를 저장하는 d[]를 생성

- i번째 수가 LIS가 성립하도록 영향을 준 수열의 인덱스를 v[i]에 저장함

- 부분수열이 존재하지 않을 때의 기본값인 1로 d[]를 초기화함

- 2부터 수열의 길이 n까지 반복하여 d[]에 값을 저장한다.

 

- 인덱스 i 이하인 수 j 중에서 a[i]보다 크면서, d[i]-1보다 큰 d[j]를 찾으면 d[i]=d[j]+1 로 업데이트한다.

- 이때, v[i]에 인덱스 j를 저장한다.

 

- 저장된 d[] 에서 최대값이 존재하는 LIS의 최대길이이다.

- d[]의 최대값을 가진 수의 인덱스를 ansIndex에 저장하고, a[ansIndex]를 stack에 저장한다.

- ansIndex를 v[ansIndex]로 갱신하며 스택에 저장하고, 수열이 끝나면 스택을 pop한다.

 

import java.util.Scanner;
import java.util.Stack;

public class BOJ14002 {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int a[] = new int[n + 1];
        int d[] = new int[n + 1];
        int v[]=new int[n+1];
        Stack<Integer> st=new Stack<>();
        int ans=d[1];

        for (int i = 1; i <= n; i++) {
            a[i] = sc.nextInt();
            d[i] = 1;
        }

        for (int i = 2; i <= n; i++) {
            for (int j = i - 1; j >= 1; j--) {
                if (a[i] > a[j] && d[i] < d[j] + 1) {
                    d[i] = d[j] + 1;
                    v[i]=j;
                }
            }
        }
        int ansIndex=1;
        for(int i=1;i<=n;i++) {
            if (ans < d[i]) {
                ans = d[i];
                ansIndex = i;
            }
        }
        System.out.println(ans);
        while(ansIndex>0){
            st.push(a[ansIndex]);
            ansIndex=v[ansIndex];
        }
        while(!st.empty())
            System.out.print(st.pop()+" ");

    }
}
반응형
저작자표시 (새창열림)

'Coding Test(Algorithms)' 카테고리의 다른 글

[JAVA] 백준 다이나믹 프로그래밍 연습문제 - BOJ 11726  (0) 2021.07.20
[JAVA] 백준 다이나믹 프로그래밍 연습문제 - BOJ 11727  (0) 2021.07.19
[JAVA] 백준 다이나믹 프로그래밍 연습문제 - BOJ 15990  (0) 2021.07.17
[JAVA] 백준 다이나믹 프로그래밍 연습문제 - BOJ 16194  (0) 2021.07.16
[JAVA] 백준 수학 연습문제 - BOJ 9613  (0) 2021.07.15
'Coding Test(Algorithms)' 카테고리의 다른 글
  • [JAVA] 백준 다이나믹 프로그래밍 연습문제 - BOJ 11726
  • [JAVA] 백준 다이나믹 프로그래밍 연습문제 - BOJ 11727
  • [JAVA] 백준 다이나믹 프로그래밍 연습문제 - BOJ 15990
  • [JAVA] 백준 다이나믹 프로그래밍 연습문제 - BOJ 16194
RED BEAN
RED BEAN
웹 프론트엔드 개발블로그입니다. 대화하고싶으시다면 댓글 혹은 ghdqlsdl9633@gmail.com 이메일주시면 감사히 답변하겠습니다. [GitHub - https://github.com/Hong-been]
반응형
RED BEAN
REDBEAN
RED BEAN
전체
오늘
어제
  • 분류 전체보기 (102)
    • 계속하는개발 (6)
    • Development (45)
    • Coding Test(Algorithms) (47)
    • Info. (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 관리자

공지사항

인기 글

태그

  • Flask
  • 자바스크립트
  • 개발자
  • 프론트엔드
  • nestjs
  • 글또
  • html
  • 티스토리챌린지
  • 국비학원
  • 온라인강의
  • 노마드코더
  • 코딩테스트
  • 코딩강의
  • 이직
  • JS
  • 자바
  • MongoDB
  • 백준
  • css
  • 모던자바스크립트딥다이브
  • 자바입출력
  • 스파르타코딩클럽
  • 코테
  • 웹개발
  • React
  • 회고
  • pymongo
  • 플라스크웹개발
  • 오블완
  • node

최근 댓글

최근 글

hELLO· Designed By정상우.v4.5.2
RED BEAN
[JAVA] 백준 다이나믹 프로그래밍 연습문제 - BOJ 14002

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.