알고리즘 공부

백준 LCS 3

컴퓨터과학 2023. 11. 9. 21:46

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

 

1958번: LCS 3

첫 줄에는 첫 번째 문자열이, 둘째 줄에는 두 번째 문자열이, 셋째 줄에는 세 번째 문자열이 주어진다. 각 문자열은 알파벳 소문자로 이루어져 있고, 길이는 100보다 작거나 같다.

www.acmicpc.net

자바로 풀었습니다. LCS를 잘 이해하고 있다면 쉽게 풀수 있는 문제입니다. 단순히 2차원에서 3차원 문자열 비교 입니다.

import java.util.*;

import java.lang.*;
import java.io.*;
public class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String x = br.readLine();
        String y = br.readLine();
        String z = br.readLine();
        int xsize=x.length();
        int ysize=y.length();
        int zsize=z.length();
        int maps[][][]=new int[xsize+1][ysize+1][zsize+1];
        for(int i=0;i<xsize+1;i++){
            for(int j=0;j<ysize+1;j++){
                for(int k=0;k<zsize+1;k++){
                    maps[i][j][k]=0;
                }
            }
        }
        for(int i=0;i<xsize+1;i++){
            for(int j=0;j<ysize+1;j++){
                for(int k=0;k<zsize+1;k++){
                    if(i==0||j==0||k==0){
                        continue;
                    }
                    if(x.charAt(i-1)==y.charAt(j-1)&&x.charAt(i-1)==z.charAt(k-1)&&y.charAt(j-1)==z.charAt(k-1)){
                        maps[i][j][k]=maps[i-1][j-1][k-1]+1;

                    }
                    else{
                        int maxs=Math.max(maps[i-1][j][k],maps[i][j-1][k]);
                        maps[i][j][k]=Math.max(maxs,maps[i][j][k-1]);
                    }
                }
            }
        }
        System.out.println(maps[xsize][ysize][zsize]);
    }
}