Problem Solving/BOJ

[백준 / BOJ] C++ 1958 LCS 3

nageune 2023. 2. 15. 05:24
728x90
반응형

1958번: LCS 3

 

문제

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

 

1958번: LCS 3

첫 줄에는 첫 번째 문자열이, 둘째 줄에는 두 번째 문자열이, 셋째 줄에는 세 번째 문자열이 주어진다. 각 문자열은 알파벳 소문자로 이루어져 있고, 길이는 100보다 작거나 같다.

www.acmicpc.net

 

 

풀이

9251번 LCS의 확장 버전이다. 아래 문제와 다른 점은 문자열 두개가 아닌 세 개를 비교하는 문제다. 

 https://khyunx.tistory.com/57

 

[백준 / BOJ] C++ 9251 LCS

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

khyunx.tistory.com

2차원 배열을 3차원 배열로 바꾸면 끝이다.

 

 

코드

#include <bits/stdc++.h>
using namespace std;

int main() {
  ios::sync_with_stdio(false);
  cin.tie(NULL);
  string a, b, c;
  cin >> a >> b >> c;
  int dp[101][101][101] = {0};
  int a_size = a.size();
  int b_size = b.size();
  int c_size = c.size();
  for (int i = 1; i <= a_size; i++)
    for (int j = 1; j <= b_size; j++)
      for (int k = 1; k <= c_size; k++)
        if (a[i - 1] == b[j - 1] && b[j - 1] == c[k - 1])
          dp[i][j][k] = dp[i - 1][j - 1][k - 1] + 1;
        else
          dp[i][j][k] = max(max(dp[i - 1][j][k], dp[i][j - 1][k]), dp[i][j][k - 1]);
  cout << dp[a_size][b_size][c_size];
  return 0;
}

 

728x90
반응형

'Problem Solving > BOJ' 카테고리의 다른 글

[백준 / BOJ] C++ 26082 WARBOY  (0) 2023.02.17
[백준 / BOJ] C++ 9213 꽤 좋은 수  (0) 2023.02.15
[백준 / BOJ] C++ 9252 LCS 2  (0) 2023.02.15
[백준 / BOJ] C++ 9251 LCS  (0) 2023.02.15
[백준 / BOJ] C++ 1269 대칭 차집합  (0) 2023.02.14