티스토리 뷰
https://www.acmicpc.net/problem/5582
5582번: 공통 부분 문자열
두 문자열이 주어졌을 때, 두 문자열에 모두 포함된 가장 긴 공통 부분 문자열을 찾는 프로그램을 작성하시오. 어떤 문자열 s의 부분 문자열 t란, s에 t가 연속으로 나타나는 것을 말한다. 예를 들
www.acmicpc.net
아래 문제와 거의 유사한데 살짝 다른 문제.
https://tose33.tistory.com/111
백준 9251. LCS
www.acmicpc.net/problem/9251 9251번: LCS LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다. 예를 들어, ACAY..
tose33.tistory.com
9251. LCS 문제는 Longest Common Subsequence, 최장 공통 부분 수열을 구하는 문제였다.
즉 두 수열이 주어졌을때 두 수열의 부분 수열(연속하지 않아도됨) 중 가장 긴 부분수열을 구하는 문제다.
이번 문제 5582. 공통 부분 문자열은 두 문자열에 모두 포함된 가장 긴 공통 부분 문자열(연속해야함)을 구해야 한다.
두 문자열이 다음과 같다면 가장 긴 공통 부분 문자열은 ADABR 이다.
ABRACADABRA
ECADADABRBCRDARA
d[i][j] :
문자열 A의 길이가 i, 문자열 B의 길이가 j 일때 A[i]와 B[j]가 같다면 해당 문자로 끝나는 공통 부분 문자열의 길이
이게 무슨 말이냐면, d[2][8] 이라면 A 문자열은 ABR, B 문자열은 ECADADABR 이다.
가장 끝 문자가 같으니, 가장 끝 문자인 R에서 부터 뒤로 카운트 했을때 공통 부분 문자열은 ABR이니까 d[2][8] = 3이다.
점화식은 if(A[i-1] == B[j-1]) d[i][j] = d[i-1][j-1] + 1
d[i-1][j-1]+1인 이유는 A와 B의 마지막 문자가 같다면 두 문자열의 마지막 문자를 제외한 문자열들에서 마지막 문자를 추가했기 때문이다.
'PS' 카테고리의 다른 글
백준 5427. 불 (0) | 2022.08.03 |
---|---|
백준 11657. 타임머신 (0) | 2022.08.03 |
백준 1600. 말이 되고픈 원숭이 (0) | 2022.08.02 |
백준 1937. 욕심쟁이 판다 (0) | 2022.08.02 |
백준 2011. 암호코드 (0) | 2022.08.01 |
- Total
- Today
- Yesterday
- recursion
- graph
- DP
- C++
- Spring
- floyd warshall
- back tracking
- BFS
- Stack
- Kruskal
- Brute Force
- greedy
- Python
- db
- binary search
- 조합
- CSS
- priority queue
- dfs
- 이분탐색
- C
- Implementation
- MVC
- two pointer
- Dijkstra
- Tree
- 자료구조
- Unity
- permutation
- 재귀
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |