728x90
반응형
https://www.acmicpc.net/problem/9251
9251번: LCS
LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다. 예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다.
www.acmicpc.net
문제
LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다.
예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다.
입력
첫째 줄과 둘째 줄에 두 문자열이 주어진다. 문자열은 알파벳 대문자로만 이루어져 있으며, 최대 1000글자로 이루어져 있다.
출력
첫째 줄에 입력으로 주어진 두 문자열의 LCS의 길이를 출력한다.
참고
https://oneul-hyeon.tistory.com/113
LCS(Longest Common Subsequence) 알고리즘
LCS 알고리즘 LCS는 주로 최장 공통 부분 수열(Longest Common Subsequence)을 말한다. LCS는 최장 공통 문자열(Longest Common Substring)을 말하기도 한다. 최장 공통 부분 수열과 최장 공통 문자열의 구분 최장
oneul-hyeon.tistory.com
풀이
Code
import sys
input = sys.stdin.readline
string1, string2 = input().rstrip(), input().rstrip()
l1, l2 = len(string1)+1, len(string2)+1
# 1. LCS dp 생성
LCS = [[0] * l1 for _ in range(l2)]
# 2.
for i in range(1, l2) :
for j in range(1, l1) :
# 2-1. 문자가 같을 경우
if string2[i-1] == string1[j-1] :
LCS[i][j] = LCS[i-1][j-1] + 1
# 2-2. 문자가 같지 않을 경우
else :
LCS[i][j] = max(LCS[i][j-1], LCS[i-1][j])
# 3. 결과 출력
print(LCS[-1][-1])
728x90
반응형
'Coding Test > Baekjoon' 카테고리의 다른 글
[Python/BOJ] 16120. PPAP (0) | 2023.07.09 |
---|---|
[Python/BOJ] 2212. 센서 (0) | 2023.07.08 |
[Python/BOJ] 1461. 도서관 (0) | 2023.06.26 |
[Python/BOJ] 13164. 행복 유치원 (0) | 2023.06.24 |
[Python/BOJ] 1747. 소수&팰린드롬 (0) | 2023.06.21 |