[필자 사고]
문제를 해석해보면 LCS 알고리즘을 사용해야 한다.
LCS 알고리즘은 공부해두면 쉽게 풀 수 있는 문제이다.
1. 각 글자들을 비교한다.
2. 만약 각 단어가 다르다면 왼쪽 or 위쪽 중 큰 값을 저장한다..
3. 만약 각 단어가 같다면 왼쪽 대각선의 값에서 +1을 더한다
[소스 코드]
#include <iostream>
#include <vector>
#include <cstring>
#include <string>
using namespace std;
string str1, str2;
int Arr[1001][1001] = { 0 };
void Input() {
cin >> str1 >> str2;
for (int i = 0; i < str1.size(); i++) {
for (int k = 0; k < str2.size(); k++) {
if (str1[i] == str2[k]) {
Arr[i + 1][k + 1] = Arr[i][k] + 1;
}
else {
Arr[i + 1][k + 1] = max(Arr[i + 1][k], Arr[i][k + 1]);
}
}
}
cout << Arr[str1.size()][str2.size()];
}
int main(void) {
Input();
}
'백준 > 동적프로그래밍' 카테고리의 다른 글
백준 c++ 11053 "가장 긴 증가하는 부분 수열" -PlusUltraCode- (0) | 2024.05.01 |
---|---|
백준 c++ 1912 "연속합" -PlusUltraCode- (0) | 2024.04.29 |
백준 1328 c++ -고층 빌딩 (1) | 2024.02.15 |
백준 1915 c++ - 가장 큰 정사각형 (1) | 2024.02.13 |
백준 9252 C++ - LCS 2 (1) | 2024.02.13 |