728x90
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
참고
https://www.youtube.com/watch?v=ukb5aVT64uY

import java.util.ArrayList;
import java.util.Scanner;
class Solution {
public static char A[], B[];
public static ArrayList<Character> list;
public static int dp[][];
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int t = sc.nextInt();
for (int tc = 1; tc <= t; tc++) {
A = sc.next().toCharArray();
B = sc.next().toCharArray();
dp = new int[A.length + 1][B.length + 1];
list = new ArrayList<>();
for (int i = 1; i <= A.length; i++) {
for (int j = 1; j <= B.length; j++) {
if (A[i - 1] == B[j - 1]) {
dp[i][j] = dp[i - 1][j - 1] + 1;
} else {
dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);
}
}
}
System.out.println("#" + tc + " " + dp[A.length][B.length]);
getText(A.length, B.length);
for (int i = list.size()-1; i >=0; i--) {
System.out.print(list.get(i));
}
}
}
public static void getText(int r, int c) {
if (r == 0 || c == 0) {
//System.out.println("A[r]:"+(r)+""+"B[r]:"+(c));
return;
}
if (A[r - 1] == B[c - 1]) {
//System.out.println("A[r-1]:"+(r-1)+""+"B[r-1]:"+(c-1));
list.add(A[r - 1]);
getText(r - 1, c - 1);
} else {
if (dp[r - 1][c] > dp[r][c-1]) {
getText(r - 1, c);
} else {
getText(r, c - 1);
}
}
}
}
길이뿐 아니라 문자를 출력해주는 방법도 공부했다.
728x90
'SW Expert Academy > SWEA D3' 카테고리의 다른 글
| [SW Expert Academy] 세제곱근을 찾아라 (D3) (0) | 2024.10.07 |
|---|---|
| [SW Expert Academy] 오목 판정 (D3) (0) | 2024.10.07 |
| [SW Expert Academy] 최고의 쌍 (D3) (0) | 2024.10.06 |
| [SW Expert Academy] 카드 게임 (D3) (0) | 2024.10.05 |
| [SW Expert Academy] 승률 비교하기 (D3) (0) | 2024.10.05 |