[๋ฐฑ์ค(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;
}
'Algorithm > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] ๊ฐ์ฅ ๊ธด ๋ฐ์ดํ ๋ ๋ถ๋ถ ์์ด(11054) (0) | 2022.03.13 |
---|---|
[BOJ] Thread Knots(17976) (0) | 2022.03.13 |
[BOJ] ๊ณ๋จ ์ค๋ฅด๊ธฐ(2579) (0) | 2022.03.12 |
[BOJ] ์ด์ง ํธ๋ฆฌ(13325) (0) | 2022.03.12 |
[BOJ] ํด์ฌ(14501) (0) | 2022.03.12 |