본문 바로가기
백준

[백준] 15482번 : 한글 LCS – JAVA [자바]

by Hongwoo 2022. 1. 30.
반응형

 

 

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

 

15482번: 한글 LCS

첫째 줄과 둘째 줄에 두 문자열이 주어진다. 문자열은 최대 1000글자이고, 유니코드 U+AC00(가)부터 U+D7A3(힣)까지로만 이루어져 있으며, UTF-8로 인코딩 되어 있다.

www.acmicpc.net

 

 

 

 


  • 문제

 

 


 

  • 풀이 방법

이 문제는 전형적인 DP의 LCS 문제이다. 조금 더 디테일한 풀이는 밑에 링크를 참고하면 되겠다.

https://propercoding.tistory.com/entry/알고리즘-LCS-최장-공통-부분-수열

 

[알고리즘] LCS (최장 공통 부분 수열)

목차 LCS란? LCS는 Longest Common Subsequence의 약자이다. 말 그대로 가장 긴 공통된 부분 수열이다. LCS는 보통 주어진 두 수열에서 각각의 부분 수열들 중, 서로 같은 부분 수열 중에서 가장 긴 부분 수

propercoding.tistory.com

 

 


 

  • 풀이
import java.io.*;
public class Main {
  public static void main(String[] args) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    String s1 = br.readLine();
    String s2 = br.readLine();
    int n = s1.length();
    int m = s2.length();
    int[][] dp = new int[n+1][m+1];
    for (int i = 0; i < n; i++) {
      for (int j = 0; j < m; j++) {
        if (s1.charAt(i) == s2.charAt(j)) {
          dp[i+1][j+1] = dp[i][j] + 1;
        } else {
          dp[i+1][j+1] = Math.max(dp[i+1][j], dp[i][j+1]);
        }
      }
    }
    System.out.print(dp[n][m]);
  }
}

 

 


 

  • 후기

되게 전형적인 LCS 문제여서 LCS 이론을 아는 사람은 쉽게 풀 수 있는 문제였다. 

 

반응형

댓글