반응형
1) 문제
https://www.acmicpc.net/problem/9251
2) 해결
코드 해석
- 입력 처리:
- Scanner를 사용하여 두 개의 문자열을 입력받음
- DP 테이블 초기화:
- dp[i][j]는 str1[0...i-1]과 str2[0...j-1]의 LCS 길이를 저장함
- 따라서 dp 배열의 크기는 (len1+1) x (len2+1)로 설정함
- DP 점화식 적용:
- 두 문자열의 각 문자를 비교하면서 LCS를 구함
- str1[i-1] == str2[j-1]이면, dp[i][j] = dp[i-1][j-1] + 1
- 다르면 dp[i][j] = max(dp[i-1][j], dp[i][j-1])
- 결과 출력:
- dp[len1][len2]에 LCS의 길이가 저장되므로 이를 출력함
이 코드는 시간 복잡도가 O(N×M)O(N \times M)로, 충분히 빠르게 동작함
import java.util.Scanner;
public class LCS {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str1 = sc.next();
String str2 = sc.next();
sc.close();
int len1 = str1.length();
int len2 = str2.length();
int[][] dp = new int[len1 + 1][len2 + 1];
for (int i = 1; i <= len1; i++) {
for (int j = 1; j <= len2; j++) {
if (str1.charAt(i - 1) == str2.charAt(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(dp[len1][len2]);
}
}
반응형
'coding_test' 카테고리의 다른 글
[99클럽 5기 코테 스터디 TIL 25일차] 무한 수열 (feat. 동적계획법) (0) | 2025.02.21 |
---|---|
[99클럽 5기 코테 스터디 TIL 24일차] 합분해 (feat. 동적계획법) (0) | 2025.02.21 |
[99클럽 5기 코테 스터디 TIL 22일차] 가장 긴 증가하는 부분 수열 (feat. 동적계획법) (0) | 2025.02.18 |
[99클럽 5기 코테 스터디 TIL 21일차] 피보나치 함수 (feat. 동적계획법) (1) | 2025.02.17 |
[99클럽 5기 코테 스터디 TIL 20일차] 최소 회의실 개수 (feat. 탐욕법(Greedy)) (0) | 2025.02.14 |