반응형
📖 문제
https://www.acmicpc.net/problem/14002
💡 풀이 방식
• LIS (DP)
LIS 배열을 만든다.
이 때 String 배열을 숫자의 수만큼 만들고, 최장 길이 수열이 만들어졌을 때 수열 정보를 업데이트한다.
🔺 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
import java.util.*;
import java.io.*;
public class Main {
static int N;
static int[] A, dp;
static String[] str;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
N = Integer.parseInt(br.readLine());
A = new int[N]; // 숫자들 배열
dp = new int[N]; // 각 숫자의 수열의 길이 배열
str = new String[N]; // 각 숫자의 수열
st = new StringTokenizer(br.readLine(), " ");
for(int i = 0 ; i < N ; i++) {
A[i] = Integer.parseInt(st.nextToken());
dp[i] = 1;
str[i] = String.valueOf(A[i]);
}
for(int i = 0 ; i < N ; i++) {
for(int j = 0 ; j < i ; j++) {
// 현재 숫자보다 왼쪽에 있고, 현재보다 더 긴 수열이 된다면
if(A[j] < A[i] && (dp[j] + 1 > dp[i])) {
dp[i] = dp[j] + 1;
str[i] = str[j] + " " + A[i]; // ⭐ i번째 수열 정보 업데이트
}
}
}
int max = 0; // 최장 길이
int idx = 0;
for(int i = 0 ; i < N ; i++) {
if(max < dp[i]) {
max = dp[i]; // 최장 길이 갱신
idx = i; // 최장 길이에서의 인덱스
}
}
System.out.println(max);
System.out.println(str[idx]);
}
}
|
cs |
➕ 다른 풀이 방식
LIS 수열을 출력할 때, DP를 역순으로 순회한 값을 스택에 저장한 풀이! 이게 더 깔끔한 듯✅
[백준] 14002 가장 긴 증가하는 부분 수열 4.Java
수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오.예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이고,
velog.io
💦 어려웠던 점
- LIS 배열을 어떻게 저장하지?의 문제
🧐 새로 알게 된 내용
- 스택을 활용한 풀이!
1회독 | 2회독 | 3회독 | 4회독 | 5회독 |
V |
(참고)
[백준] 14002번 : 가장 긴 증가하는 부분 수열 4 - JAVA [자바]
https://www.acmicpc.net/problem/14002이 문제는 이 링크의 문제를 읽고 이해하면 쉽게 풀린다. \[백준] 11053번 : 가장 긴 증가하는 부분 수열 - JAVA \[자바]위의 링크의 문제를 이해했으면 이제 수열의 정보
velog.io
반응형
'코테 > 백준' 카테고리의 다른 글
[백준/JAVA] 18429번: 근손실 (0) | 2024.06.09 |
---|---|
[백준/JAVA] 10709번: 기상캐스터 (1) | 2024.06.08 |
[백준/JAVA] 2118번: 두 개의 탑 (0) | 2024.06.06 |
[백준/JAVA] 2870번: 수학숙제 (1) | 2024.06.06 |
[백준/JAVA] 3474번: 교수가 된 현우 (1) | 2024.06.05 |