[BOJ] LCS(9251)
[λ°±μ€(BOJ)] LCS(9251) C++
λ¬Έμ : BOJ_9251λ² LCS
λ¬Έμ μ€λͺ
DP
μ΅λ 1000 κΈμμ λ λ¨μ΄κ° μ£Όμ΄μ§κ³ , λ λ¨μ΄μμ 곡ν΅λ λΆλΆ μμ΄ μ€ κ°μ₯ κΈ΄ μμ΄μ μ°Ύλ λ¬Έμ μ
λλ€.
λ¬Έμ μ체λ κ°λ¨νμ§λ§, μμ νμμ μ΄μ©νλ©΄ μκ° μ΄κ³Όκ° λκΈ° λλ¬Έμ DPλ₯Ό νμ©νμ¬ ν΄κ²°ν΄μΌ νλ λ¬Έμ μ
λλ€.
Solution
μ νλ₯Ό μ°Έκ³ ν΄μ DP μμ μ§μΌ ν©λλ€.
λ λ¬Έμμ΄μ κΈΈμ΄λ§νΌ 2μ€ for λ¬Έμ μννλ©΄μ λ¬Έμκ° κ°μ λμ λ€λ₯Ό λ λ 쑰건μΌλ‘ dp μμ μΈμμ€λλ€.
λ λ¬Έμμ΄μ΄ κ°λ€λ©΄, dp[i][j] = dp[i-1][j-1]+1
μ¦, μ νμμ λκ°μ μ dp κ° + 1
μ
λλ€.
λ λ¬Έμμ΄μ΄ λ€λ₯΄λ€λ©΄, dp[i][j] = max(dp[i][j-1], dp[i-1][j])
μ¦, μ νμμμ μΌμͺ½μ΄λ μμͺ½ κ°μ μ΅λκ°μ
λλ€.
λ κ°μ΄ κ°μ§ μλ€λ©΄, κ·Έμ dp κ° μ€ μ΅λκ°μ΄ λ€μ΄κ°μΌ νλλ°, νμ μΌμͺ½μ΄λ μμͺ½ κ°μ μ΅λκ°μ΄ κ·Έ κ°μ΄κΈ° λλ¬Έμ
λλ€.
Description
- λ¬Έμμ΄μ 0λ² μΈλ±μ€λΆν° μμνλ―λ‘, μ΄λ₯Ό μ²λ¦¬νκΈ° μν΄ dp κ°μ iμ jμ 1μ© λν΄μ£Όμμ΅λλ€.
- κ·Έλ¬λ―λ‘ μ΅μ’
μΆλ ₯κ°λ
dp[1λ² λ¬Έμμ΄μ κΈΈμ΄-1][2λ² λ¬Έμμ΄μ κΈΈμ΄-1]
μ΄ μλdp[1λ² λ¬Έμμ΄μ κΈΈμ΄][2λ² λ¬Έμμ΄μ κΈΈμ΄]
μ λλ€.
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
char str1[1001], str2[1001];
int dp[1001][1001];
int main(void){
cin >> str1 >> str2;
for(int i=0; str1[i]!='\0'; i++){
for(int j=0; str2[j]!='\0'; j++){
if(str1[i]==str2[j]){
dp[i+1][j+1]=dp[i][j]+1;
}
else {
dp[i+1][j+1]= max(dp[i][j+1],dp[i+1][j]);
}
}
}
cout << dp[strlen(str1)][strlen(str2)] << '\n';
return 0;
}