def BOJ9252():
first = input()
second = input()
array = [[[0, '']] * (len(second) + 1) for _ in range(len(first) + 1)]
l = []
for i in range(1, len(first) + 1):
for j in range(1, len(second) + 1):
if first[i-1] == second[j-1]:
array[i][j] = [array[i-1][j-1][0] + 1, array[i-1][j-1][1] + first[i-1]]
else:
if array[i-1][j][0] > array[i][j-1][0] :
array[i][j] = [array[i-1][j][0], array[i-1][j][1]]
elif array[i-1][j][0] < array[i][j-1][0]:
array[i][j] = [array[i][j-1][0], array[i][j-1][1]]
else :
array[i][j] = [array[i][j-1][0], array[i][j-1][1]]
print(array[len(first)][len(second)][0])
print(array[len(first)][len(second)][1])
BOJ9252()
접근방법 :
1. 길이만 구하는 것이 아니라 제일 긴 문자열도 구해야 했다. dp와 이차원 배열을 이용하였다.
2. 비교 문자열이 같으면 대각선에서 길이와 문자열을 더해준다.
3. 비교 문자열이 다르면 위의 값과 좌측의 값중 길이가 더 긴 값을 선택해준다.
=> 직접 손으로 그려가면서 익히시면 매우 편하실 것입니다
장애물 이였던 것 :
1. 한번 직접 과정을 그려보니 이해가 되었다.
2. 대각선에서 더하는 것이 잘 떠오르지 않았었다.
https://www.acmicpc.net/problem/9252
9252번: LCS 2
LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다. 예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다.
www.acmicpc.net
'알고리즘' 카테고리의 다른 글
가장 긴 증가하는 부분 수열 5[백준 14003] - python (0) | 2021.12.27 |
---|---|
연구소[백준14502] - python (0) | 2021.12.26 |
사다리 [백준 2022] - python (0) | 2021.12.23 |
후위 표기식 2[백준 1935] - python (0) | 2021.12.22 |
다각형의 면적 [백준 2166] - python (0) | 2021.12.21 |