diff --git a/janghw0126/DP/LCS2.py b/janghw0126/DP/LCS2.py new file mode 100644 index 0000000..dcafc34 --- /dev/null +++ b/janghw0126/DP/LCS2.py @@ -0,0 +1,33 @@ +import sys +input = sys.stdin.readline + +# 문자열 입력 받기 +string1 = list(input().rstrip()) +string2 = list(input().rstrip()) + +# LCS 길이 및 LCS 문자열 저장을 위한 DP 테이블 초기화 +dp_table = [[""] * (len(string2) + 1) for _ in range(len(string1) + 1)] + +# DP로 LCS 계산 +for i in range(1, len(string1) + 1): + for j in range(1, len(string2) + 1): + # 현재 문자가 같으면 이전 LCS에 해당 문자를 추가 + if string1[i - 1] == string2[j - 1]: + dp_table[i][j] = dp_table[i - 1][j - 1] + string1[i - 1] + else: + # 현재 문자가 다를 경우 더 긴 LCS를 선택 + if len(dp_table[i - 1][j]) >= len(dp_table[i][j - 1]): + dp_table[i][j] = dp_table[i - 1][j] + else: + dp_table[i][j] = dp_table[i][j - 1] + +# 최종 LCS 문자열 +lcs_result = dp_table[-1][-1] +# 공통 부분 수열이 없는 경우 +if len(lcs_result) == 0: + # 결과 출력 + print(0) +else: + # 결과 출력 + print(len(lcs_result)) + print(lcs_result) \ No newline at end of file diff --git a/janghw0126/README.md b/janghw0126/README.md index affdf6d..013a1d3 100644 --- a/janghw0126/README.md +++ b/janghw0126/README.md @@ -54,4 +54,5 @@ | 16차시 | 2024.10.30 | 스택 | 문자열 폭발 |[#183](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/183) | | 17차시 | 2024.11.3 | 이진 탐색 | 랜선 자르기 |[#186](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/186) | | 18차시 | 2024.11.12 | 브루트포스 | 카잉 달력 |[#188](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/188) | +| 19차시 | 2024.12.2 | DP | LCS 2 |[#191](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/191) | --- \ No newline at end of file