CodeWars 아흔 아홉 번째 문제

Updated:

Longest Common Subsequence

public static String lcs(String x, String y) {
    int[][] arr = new int[x.length()+1][y.length()+1];

    for(int i = 0; i < x.length() ; i++) {
        for(int j = 0; j < y.length(); j++) {
            if(x.charAt(i) == y.charAt(j)) {
                arr[i+1][j+1] = arr[i][j]+1;
            } else {
                arr[i+1][j+1] = Math.max(arr[i+1][j], arr[i][j+1]);
            }
        }
    }

    String substring = "";
    int count = 1;

    for(int j = 1; j < y.length()+1; j++) {
        for(int i = 1; i < arr.length; i++) {
            if(count == arr[i][j]) {
                substring += String.valueOf(y.charAt(j-1));
                count++;
                break;
            }
        }
    }

    return substring;
}
  • 얼마전에 substring이랑 subsequnce 메소드 비교하는 블로그를 보다가 LCS 알고리즘을 본적이 있다.
  • 그때는 대략 보고 넘겼는데 마침 오늘 LCS 알고리즘 문제가 딱 나왔다.
  • LCS 알고리즘을 먼저 이해하고 풀어서 문제는 쉽게 풀었으나 LCS 알고리즘을 이해하는데 조금 시간이 걸렸다.