ProblemSolve/항해99 코테스터디

99클럽 코테 스터디 34일차 TIL (챌린저): [백준][Java] LCS 3 - 골드5

노루동산 2024. 11. 30. 20:02

 

문제 보기

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

 

 

풀이

https://mountain-noroo.tistory.com/30

 

[백준][C#] 9251 LCS - 골드5

문제 보기 https://www.acmicpc.net/problem/9251 9251번: LCS LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다. 예를

mountain-noroo.tistory.com

 

예전에 LCS 문제를 푼 적이 있다.

이번엔 그 3차원 배열 버전이다.

 

문제를 푸는 방법은 동일하기 때문에 위 포스팅을 보고 오면 될 것 같다.

 

 

전체 코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;

public class Main {

  public static void main(String[] args) throws IOException {

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

    String str1 = br.readLine();
    String str2 = br.readLine();
    String str3 = br.readLine();

    int[][][] dp = new int[str1.length()+1][str2.length()+1][str3.length()+1];

    for(int i = 0; i <= str1.length(); i++) {
      for(int j = 0; j <= str2.length(); j++) {
        for(int k = 0; k <= str3.length(); k++) {
          if(i == 0 || j == 0 || k == 0) {
            dp[i][j][k] = 0;
            continue;
          }

          if(str1.charAt(i - 1) == str2.charAt(j - 1) && str1.charAt(i - 1) == str3.charAt(k - 1)) {
            dp[i][j][k] = dp[i-1][j-1][k-1] + 1;
          } else {
            dp[i][j][k] = Math.max(dp[i-1][j][k], Math.max(dp[i][j-1][k], dp[i][j][k-1]));
          }
        }
      }
    }

    bw.write(dp[str1.length()][str2.length()][str3.length()] + "");
    bw.flush();
    bw.close();
  }
}

 

 

GitHub 링크

https://github.com/MetroDefro/CodingTest_AutoSave/tree/main/%EB%B0%B1%EC%A4%80/Gold/1958.%E2%80%85LCS%E2%80%853

 

CodingTest_AutoSave/백준/Gold/1958. LCS 3 at main · MetroDefro/CodingTest_AutoSave

모든 코딩 테스트 자동 저장. Contribute to MetroDefro/CodingTest_AutoSave development by creating an account on GitHub.

github.com