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 |