https://www.acmicpc.net/problem/5582
두 문자열이 주어졌을 때, 두 문자열에 모두 포함된 가장 긴 공통 부분 문자열을 찾으시오.
입력
첫 번째 줄 : 문자열 N
두 번째 줄 : 문자열 M
출력
부분 문자열의 최대 길이
공통 부분 문자열은 2차원 배열로 구성된 dp를 통해서 쉽게 풀 수 있는 문제입니다.
자세한 풀이 방법은 별도로 알고리즘을 정리한 포스트를 참고해주세요.
https://angelplayer.tistory.com/513
package test;
import java.io.*;
import java.util.*;
public class 공통부분문자열 {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
st = new StringTokenizer(br.readLine());
String N = "0" + st.nextToken();
st = new StringTokenizer(br.readLine());
String M = "0" + st.nextToken();
// System.out.println(N);
int answer = 0;
int[][] dp = new int[N.length()][M.length()];
for (int i = 1; i < N.length(); i++) {
for (int j = 1; j < M.length(); j++) {
if (N.charAt(i) == M.charAt(j)) {
dp[i][j] = dp[i - 1][j - 1] + 1;
answer = Math.max(answer, dp[i][j]);
} else {
dp[i][j] = 0;
}
}
}
System.out.println(answer);
}
}
~~
해당 코드는 에디터가 코드 연습을 위해 직접 작성하였습니다.
혹시 오류가 있거나 더 좋은 코드 방향성을 아시는 분은 댓글로 남겨주시면 감사하겠습니다!
python source : https://github.com/ssh5212/conding-test-practice
java source : https://github.com/ssh5212/coding-test-java
[인프런] 최대 길이 연속 부분 수열 (투 포인터^) (2) | 2024.01.10 |
---|---|
[코딩테스트] Java 첫 코딩 테스트 시작 시 문법 정리 (2) | 2023.12.20 |
[알고리즘] 최장 공통 문자열(LCS : Longest Common Substring) 알고리즘 (2) | 2023.10.30 |
[Baekjoon] 백준 18405 전염 (G5^ / BFS, PQ) - Java (1) | 2023.10.28 |
[Baekjoon] 백준 2573 빙산 (G4^ / BFS) - Java (0) | 2023.10.22 |