#문제
9251번: LCS
LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다. 예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다.
www.acmicpc.net
#풀이 & 학습한 내용
index가 0부터 시작하게 설정한 것이 있고, 1부터 시작하게 설정한 것이 있어 확실히 정리해두고 코딩하지 않으면 매우 헷갈린다. 두 문자열의 마지막을 기준으로 생각하여 경우를 나누고 optimal substructure를 구해서 for문을 통해 구현했다. strlen을 사용하기 위해 #inlcude<cstring>을 추가해줬다.
#소스코드
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int dp[1002][1002];
int main(void) {
char a[1002];
char b[1002];
cin >> a >> b;
int a_l = strlen(a);
int b_l = strlen(b);
for (int i = 0; i <= a_l; i++)
dp[i][0] = 0;
for (int i = 0; i <= b_l; i++)
dp[0][i] = 0;
for (int i = 1; i <= a_l; i++) {
for (int j = 1; j <= b_l; j++) {
if (a[i-1] == b[j-1])
dp[i][j] = dp[i - 1][j - 1] + 1;
else
dp[i][j] = max({ dp[i][j - 1],dp[i - 1][j] });
}
}
cout << dp[a_l][b_l] << '\n';
}
|
cs |
github.com/HoYoungChun/BOJ_algorithm/blob/master/Dynamic_Programming/BOJ_9251.cpp
HoYoungChun/BOJ_algorithm
Baekjoon Online Judge problem solving by C++. Contribute to HoYoungChun/BOJ_algorithm development by creating an account on GitHub.
github.com
'Algorithm > Dynamic Programming' 카테고리의 다른 글
| [C++] 백준 1149번 : RGB거리 (S1) (0) | 2020.11.11 |
|---|---|
| [C++] 백준 9252번 : LCS 2 (G5) (0) | 2020.11.11 |
| [C++] 백준 2225번 : 합분해 (G5) (0) | 2020.11.10 |
| [C++] 백준 1699번 : 제곱수의 합 (S3) (0) | 2020.11.10 |
| [C++] 백준 1912번 : 연속합 (S2) (0) | 2020.11.09 |