문제
LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다.
예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다.
입력
첫째 줄과 둘째 줄에 두 문자열이 주어진다. 문자열은 알파벳 대문자로만 이루어져 있으며, 최대 1000글자로 이루어져 있다.
출력
첫째 줄에 입력으로 주어진 두 문자열의 LCS의 길이를 출력한다.
예제 입력 1
ACAYKP
CAPCAK
예제 출력 1
4
0 | A | C | A | Y | K | P | |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
C | 0 | 0 | 1 | 1 | 1 | 1 | 1 |
A | 0 | 1 | 1 | 2 | 2 | 2 | 2 |
P | 0 | 1 | 1 | 2 | 2 | 2 | 3 |
C | 0 | 1 | 2 | 2 | 2 | 2 | 3 |
A | 0 | 1 | 2 | 3 | 3 | 3 | 3 |
K | 0 | 1 | 2 | 3 | 3 | 4 | 4 |
A = input(); B = input()
lcs = [[0] * (len(A)+1) for _ in range(len(B)+1)]
for i in range(1,len(B)+1) :
for j in range(1,len(A)+1) :
if B[i-1] == A[j-1] :
lcs[i][j] = lcs[i-1][j-1] + 1
else :
lcs[i][j] = max(lcs[i][j-1], lcs[i-1][j])
print(lcs[-1][-1])
반응형
'Algorithm > Online judge' 카테고리의 다른 글
[백준] 1764번 > 듣보잡 (0) | 2021.02.17 |
---|---|
[백준] 1100번 > 하얀 칸 (0) | 2021.02.17 |
[백준] 13305번 > 주유소 (0) | 2021.02.16 |
[프로그래머스] 2021 카카오 블라인드 채용 > 메뉴 리뉴얼 (0) | 2021.02.15 |
[프로그래머스] 2021 카카오 블라인드 채용 > 신규 아이디 추천 (0) | 2021.02.15 |