AngelPlayer`s Diary

링크

https://www.acmicpc.net/problem/5582

 

5582번: 공통 부분 문자열

두 문자열이 주어졌을 때, 두 문자열에 모두 포함된 가장 긴 공통 부분 문자열을 찾는 프로그램을 작성하시오. 어떤 문자열 s의 부분 문자열 t란, s에 t가 연속으로 나타나는 것을 말한다. 예를 들

www.acmicpc.net

 

 

 

 

문제 해석

두 문자열이 주어졌을 때, 두 문자열에 모두 포함된 가장 긴 공통 부분 문자열을 찾으시오.

 

 

입력
첫 번째 줄 : 문자열 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

공유하기

facebook twitter kakaoTalk kakaostory naver band