본문 바로가기
PS 문제 풀이/Baekjoon

[BOJ] 백준 9252 LCS 2

by 까망 하르방 2021. 2. 21.
반응형

출처: https://www.acmicpc.net/problem/9252 

 Input 
ACAYKP
CAPCAK

 Output 

4
ACAK

LCS 길이와 공통 문자열을 출력하는 문제.

LCS (Longest Common Subsequence) 알고리즘

 

LCS(Longest Common Subsequence) 알고리즘

LCS(Longest Common Subsequence) '최장 공통 부분 수열'로 연속된 부분 문자열 Substring과는 다른 개념이다.   ▶ [BOJ] 5582 공통 부분 문자열 가령, 아래 두 문자열이 주어졌을 때, - A   B   C   D..

zoosso.tistory.com


import java.util.Scanner;
 
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
         
        char[] A = sc.next().toCharArray();
        char[] B = sc.next().toCharArray();
        int[][] LCS = new int[A.length+1][B.length+1];
         
        for(int i=1; i<=A.length; i++) {
            for(int j=1; j<=B.length; j++) {
                if(A[i-1] == B[j-1]) {
                    LCS[i][j] = LCS[i-1][j-1] + 1;
                }
                else {
                    LCS[i][j] = Math.max(LCS[i-1][j], LCS[i][j-1]);
                }
            }
        }
        // LCS 길이 출력
        System.out.println(LCS[A.length][B.length]);
         
        int x = A.length;
        int y = B.length;
        StringBuffer sb = new StringBuffer();
        while(!(x == 0 || y == 0)) {
            if(A[x-1] == B[y-1]) {
                sb.append(A[x-1]);
                x--; y--;
            }
            else if(LCS[x][y] == LCS[x-1][y]) {
                x--;
            }
            else if(LCS[x][y] == LCS[x][y-1]) {
                y--;
            }
        }
        // LCS 문자열 길이 출력
        System.out.println(sb.reverse().toString());
    }
}

 

반응형

'PS 문제 풀이 > Baekjoon' 카테고리의 다른 글

[BOJ] 백준 15683 감시  (0) 2021.02.21
[BOJ] 백준 1958 LCS 3  (0) 2021.02.21
[BOJ] 백준 9251 LCS  (0) 2021.02.21
[BOJ] 백준 5582 공통 부분 문자열 (Java)  (0) 2021.02.21
[BOJ] 백준 14891 톱니바퀴  (0) 2021.02.21

댓글