반응형
Notice
Recent Posts
Recent Comments
Link
뜌릅
LCS 백준 - 9251번 본문
반응형
LCS문제 입니다. 저는 처음 봤는데, 구글링을 해본 결과, 유명한 문제 유형이더군요. 이 문제도 전에 풀었던 Knapsack문제와 매우 유사하게 풀었습니다. 역시 dp를 사용했습니다.
Dp문제는 너무 어려운 것 같습니다. 보고나면, 쉬운데 발상 자체는 떠올리기가 힘듭니다.
이 문제를 풀기위해서는 한글자씩 비교하면서, 맞으면 갯수+1를 해야 합니다. 하지만, 단순히 모든걸 비교하면, 시간초과가 발생합니다. 결국에는 어떤 방식으로 비교하는 문제가 되는 겁니다.
이 문제는 BFS같은 느낌으로 풀었습니다. 둘이 비교해서 같으면 +1, 다르면 첫번째 문자열만 다음 문자로 넘긴것과 두번째 문자열만 다음 문자로 넘겼을 경우를 비교하여, 둘중 최댓값을 출력하는 겁니다.
#import<bits/stdc++.h>
using namespace std;
void solve(){
string str1;
string str2;
cin>>str1>>str2;
vector<vector<int>> v(str1.size()+1,vector<int>(str2.size()+1,0));
for(int i =1;i<=str1.size();i++){
for(int j =1;j<=str2.size();j++){
if(str1[i-1] == str2[j-1]){
v[i][j] = v[i-1][j-1]+1;
}
else{
v[i][j] = max(v[i][j-1],v[i-1][j]);
}
}
}
cout<<v[str1.size()][str2.size()];
}
int main(){
ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
solve();
return 0;
}
이를 코드로 짜면 위와 같이 됩니다. 이차원 배열안에 들어가는 숫자는 각 문자열들의 해당번째의 문자를 비교하는 경우가 됩니다.
반응형
'알고리즘 > PS 문제' 카테고리의 다른 글
파티 1238번 [백준] (0) | 2021.05.02 |
---|---|
Stickers 백준 - 9465번 (0) | 2021.03.15 |
트리의 부모 찾기 백준 - 11725번 (0) | 2021.03.13 |
평범한 배낭 백준 - 12865번 (0) | 2021.03.09 |
The Triangle 백준 - 1932번 (0) | 2021.03.08 |