알고리즘 분류 > 문자열 > LCS
LCS Lv.골드5
LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다.
예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다.
첫 번째 풀이 : 실패
n = input()
m = input()
ans = 0
for i in range(len(n)):
for j in range(i, len(m)):
if n[i] == m[j]:
ans+=1
break
print(ans)
- 가장 긴 걸 찾아야 되는데
- 처음에 문자가 같다고 판단하면 거기서 멈춤
두 번째 풀이: 100점
import sys
string_a = ' ' + sys.stdin.readline().rstrip()
string_b = ' ' + sys.stdin.readline().rstrip()
dp = [[0] * len(string_b) for _ in range(len(string_a))]
for i in range(1, len(string_a)):
for j in range(1, len(string_b)):
if string_a[i] == string_b[j]:
dp[i][j] = dp[i - 1][j - 1] + 1
else:
dp[i][j] = max(dp[i - 1][j], dp[i][j - 1])
print(dp[-1][-1])
'코딩테스트 | python > 백준' 카테고리의 다른 글
| [백준 | python] 좌표 압축 (0) | 2024.05.09 |
|---|---|
| [백준 | python] 24479 알고리즘 수업 - 깊이 우선 탐색 1 (0) | 2024.03.21 |
| [백준 | python] 2606 바이러스 #BFS #DFS (0) | 2024.03.21 |
| 백준 단계별로 풀기(그리디 알고리즘) (0) | 2023.06.28 |
| 백준 단계별로 풀기(집합과 맵) (0) | 2023.06.28 |