๋ฌธ์ ๋งํฌ
์ฝ๋ ์ ์ถ ๊ธฐ๋ก (๋ฉ๋ชจ๋ฆฌ ๋ฐ ์๊ฐ)
๋ฉ๋ชจ๋ฆฌ : 6004 KB
์๊ฐ : 4 ms
Code
#include <vector>
#include <iostream>
#include <string>
#include <algorithm>
std::vector<std::vector<int> > dp;
std::vector<char> answer;
std::string str1, str2;
void preset()
{
std::ios_base::sync_with_stdio(false);
std::cin.tie(NULL);
std::cout.tie(NULL);
}
void init(){
std::cin >> str1 >> str2;
dp.resize(str1.length()+1, std::vector<int>(str2.length()+1,0));
}
void solution(){
//fill dp
for (int i = 1 ; i <= str1.length() ; i++){
for(int j = 1 ; j<= str2.length() ; j++){
if (str1[i-1] == str2[j-1])
dp[i][j] = dp[i-1][j-1] + 1;
else
dp[i][j] = std::max(dp[i-1][j], dp[i][j-1]);
}
}
//fill answer
int k = str1.length();
for(int j = str2.length(); j>=0 ; j--){
if (dp[i][j] == 0)
break;
for (int i = k; i>=0 ; i--){
if (dp[i][j] == dp[i][j-1])
break;
else if (dp[i][j] == dp[i-1][j])
continue;
else{
answer.push_back(str1[i-1]);
k = i-1;
break;
}
}
}
}
void output(){
std::cout << answer.size() << std::endl;
while(!answer.empty()){
std::cout << answer.back();
answer.pop_back();
}
std::cout << std::endl;
}
int main(){
preset();
init();
solution();
output();
return (0);
}
C++
๋ณต์ฌ
๋ฉ๋ชจ
CAPCAK
ACAYKP
Plain Text
๋ณต์ฌ
์๋ ๊ทธ๋ฆผ์ ์์ ์์๋ก ์
๋ ฅ๋ฌ๋ค๋ ๊ฐ๋ฅํ์ ๊ทธ๋ ค์ง
<2์ฐจ์ vector ์ ์ธ ๋ฐ ์ด๊ธฐํ>
std::vector<std::vector<int> > dp;
dp.resize(str1.length()+1, std::vector<int>(str2.length()+1,0));
C++
๋ณต์ฌ
โ 2์ฐจ์ ๋ฒกํฐ๋ฅผ ์ ์ธํด ๊ฐ๋ก str2.length, ์ธ๋ก str1.length ๋งํผ์ ๋ชจ๋ 0์ผ๋ก ์ด๊ธฐํํจ
<C++ ์ ์ถ๋ ฅ ๊ฐ์ฑ๋ฅผ ๊ฐ์์ํค๋ ๋ฒ>
void preset()
{
std::ios_base::sync_with_stdio(false);
std::cin.tie(NULL);
std::cout.tie(NULL);
}
C++
๋ณต์ฌ
โ cin, cout์ด scanf, printf์ ๋นํด์ ์๋๊ฐ ๋ง์ด ๋๋ฆฌ๊ณ std::endl๋ณด๋ค '\n'๊ฐ ํจ์ฌ ๋น ๋ฅด๋ค.
โ sync_with_stdio(false); ๋ฅผ ์ด์ฉํด์ ย C++ ์
์ถ๋ ฅ ๊ฐ์ฑ๋ฅผ ๊ฐ์์์ผ์ ์ฌ์ฉํ ๊ฒ์ด๋ผ๋ฉด,
scanf์ printf์ ์์ด์ ์ฌ์ฉํ์ง ๋ง ๊ฒ!
์ฑ๊ธ ์ฐ๋ ๋ ํ๊ฒฝ์์๋ง ์ฌ์ฉํ ๊ฒ!
๊ทธ๋๋ ์๊ฐ์ด๊ณผ๊ฐ ๋๋ค๋ฉด C ํ์ค์
์ถ๋ ฅ ํจ์๋ค์ ์ฌ์ฉํ ๊ฒ!