728x90
공통 부분 문자열
https://www.acmicpc.net/problem/5582
<문제>
<코드>
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 | #include <stdio.h> // a 가 빠르면 0 b가 빠르면 1 int Dp[4001][4001]; int main() { int max = 0; char A[4001]; char B[4001]; scanf("%s", A); scanf("%s", B); for (int i = 0; A[i] != 0; i++) for (int j = 0; B[j] != 0; j++) { if (A[i] == B[j]) { if (i == 0 || j == 0) Dp[i][j] = 1; else Dp[i][j] = Dp[i - 1][j - 1] + 1; if (max<Dp[i][j]) max = Dp[i][j]; } } printf("%d\n", max); return 0; } | cs |
<문제 푼 요령>
1. Dp[i][j] 는 문자열 A의 i번째 요소와 B의 문자열의 j번째 요소가 비교했을때의 여기서 최대 길이를 저장 한것이다.
2. 최대길이를 비교하기 위해서는 Dp[i-1][j-1] 의 요소값을 확인해야한다. 왜냐하면 Dp[i][j] 의 즉 A의 i 번째 요소와 B의 j번째 요소가 같을시 이전 Dp[i-1][j-1] 을 확인해서 이전에 까지의 최장길이를 확인해서 추가해야 한다.
3. 그래서 그 나온 길이값 중에서 최대값을 나타내면 된다.
728x90
'Algorithm > DP(동적 계획법)' 카테고리의 다른 글
[백준][11060번][DP] 점프 점프 (0) | 2016.10.05 |
---|---|
[백준][9084번][DP] 동전 (0) | 2016.10.05 |
[백준][1937번][DP] 욕심쟁이 판다 (5) | 2016.10.04 |
[백준][2096번][DP] 내려가기 (0) | 2016.10.01 |
[백준][2294번][DP] 동전 2 (0) | 2016.09.30 |
댓글