hades

[Baekjoon] 9251๋ฒˆ: LCS ๋ณธ๋ฌธ

๐Ÿ‘Š PS

[Baekjoon] 9251๋ฒˆ: LCS

hades1 2024. 8. 27. 21:57

๐Ÿฅ… ๋ฌธ์ œ

https://www.acmicpc.net/problem/9251

 

๐Ÿ” ์„ค๊ณ„

์ดˆ๊ธฐ์—๋Š” ์ผ์ฐจ์› ๋ฐฐ์—ด์„ ์„ ์–ธํ•˜๊ณ , strA์™€ strB๋ฅผ ์ด์ค‘ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ์ˆœํšŒํ•˜๋ฉด์„œ, ๊ฐ™์œผ๋ฉด ๊ทธ ์ธ๋ฑ์Šค๊นŒ์ง€์˜ ์ตœ์žฅ ๊ฑฐ๋ฆฌ๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๋Š” ๋ฐฉ์‹์œผ๋กœ ์‹œ๋„ํ–ˆ์ง€๋งŒ, ์ˆœ์„œ๊ฐ€ ๊ณ ๋ ค๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

 

๋”ฐ๋ผ์„œ, ์ด์ฐจ์› ๋ฐฐ์—ด๋กœ ์„ ์–ธํ•˜์—ฌ, dp[i][j]๋Š” strA์—์„œ i๋ฒˆ์งธ, strB์—์„œ j๋ฒˆ์งธ๊นŒ์ง€ ์ตœ์žฅ ๊ธธ์ด๋ฅผ ์ €์žฅํ•œ๋‹ค.

 

dp[0][0]์„ ์ดˆ๊นƒ๊ฐ’์œผ๋กœ ์ด์šฉํ•˜๊ธฐ ์œ„ํ•ด, ๋ฐ˜๋ณต๋ฌธ์„ 1๋ถ€ํ„ฐ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค. ๋ฌธ์ž์—ด์€ 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋ฏ€๋กœ, ๋ฌธ์ž์—ด์—์„œ๋Š” i-1, j-1์„ ์ด์šฉํ•œ๋‹ค.

 

strA[i-1]๊ณผ strB[j-1]์ด ๊ฐ™์œผ๋ฉด, dp[i][j]๋ฅผ dp[i-1][j-1]+1๋กœ ๊ฐฑ์‹ ํ•œ๋‹ค. ๋‘ ๋ฌธ์ž์—ด์—์„œ ๊ฐ๊ฐ i์™€ j๊ฐ€ ๋˜๊ธฐ ์ „์˜ ์ตœ์žฅ ๊ธธ์ด์— 1์„ ๋”ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

strA[i-1]๊ณผ strB[j-1]์ด ๋‹ค๋ฅด๋ฉด, dp[i][j]๋ฅผ dp[i-1][j]์™€ dp[i][j-1] ์ค‘ ํฐ ๊ฐ’์œผ๋กœ ๊ฐฑ์‹ ํ•œ๋‹ค. dp[i-1][j]์™€ dp[i][j-1]๋Š” dp[i][j]๊ฐ€ ์•„๋‹Œ ๊ฒƒ ์ค‘์— ์ตœ์žฅ ๊ธธ์ด๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ๋‹ค.

 

๐Ÿ‘Š ํ’€์ด

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int dp[1001][1001];
string strA, strB;

int main(void)
{
	ios_base::sync_with_stdio(false);
	cin.tie(nullptr);
	cin >> strA >> strB;

	for (int i = 1; i <= strA.length(); i++) {
		for (int j = 1; j <= strB.length(); j++) {
			if (strA[i-1] == strB[j-1]) {
				dp[i][j] = dp[i - 1][j - 1] + 1;
			}
			else {
				dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);
			}
		}
	}
	cout << dp[strA.length()][strB.length()] << "\n";
	return 0;
}