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]);
    }
}

'알고리즘 공부' 카테고리의 다른 글

백준 동전2(복습)  (1) 2023.11.15
백준 동전1(복습)  (0) 2023.11.13
백준 LCS 2  (0) 2023.11.09
백준 보물섬(복습)  (0) 2023.11.09
백준 LCS (복습)  (0) 2023.11.07

+ Recent posts