def BOJ9251() :
first = input()
second = input()
array = [[0] * (len(second) + 1) for _ in range(len(first) + 1)]
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] + 1
else :
array[i][j] = max(array[i-1][j], array[i][j-1])
print(array[len(first)][len(second)])
BOJ9251()
접근방법 :
1. 이차원 배열로 접근
2. 비교하는 문자열이 같다면 대각선에서 길이를 더해주자
3. 비교하는 문자열이 다르다면 이전까지의 최대값을 알아야 하므로 행 -1, 열-1 값중 최댓값을 가져오자
장애물 이었던 것 :
1. 직접 해보는 순간 문제는 다 해결된다. 가끔 해보기도 전에 겁을 지레 먹고 백기를 드는 경우가 있는것 같다
https://www.acmicpc.net/problem/9251
9251번: LCS
LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다. 예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다.
www.acmicpc.net
'알고리즘' 카테고리의 다른 글
케빈 베이컨의 6단계 법칙 (0) | 2022.01.04 |
---|---|
가장 큰 증가 부분 수열[백준 11055] - python (0) | 2022.01.02 |
파도반 수열[백준 9461] - python (0) | 2021.12.31 |
01타일 [백준 1904] - python (0) | 2021.12.30 |
파이프 옮기기 1 [백준 17070] - python (0) | 2021.12.29 |