
해당 문제는 두 개의 수열이 주어졌을 때, 두 개의 수열이 공통적으로 가지고 있는 문자열로
가장 긴 부분 수열을 만들고, 그 길이를 출력하는 문제이다
두 개의 수열을 동시에 확인해야하기 때문에 index의 위치를 옮기면서 그 당시의 최대 길이를 저장하는 로직을 생각하였다
그 과정속에서 동적 게획법을 사용하면 시간 제한에 걸리지 않을 수 있을거라고 생각했다
로직 작성에 앞서, 두 문자열을 리스트로 변환하여 입력받은 후, 길이를 저장하기 위한 2차원 리스트를 만들어준다
이후에 두 문자열의 길이로 for문을 두개 만들고 index를 이동하며 최대 길이를 찾는다
만약 비교하는 두 문자열이 같다면 +1 한 값을 저장해주고,
아니라면 각각의 이전 index의 값 중에서 최댓값을 저장해주면 된다
이렇게 되면 길이의 최댓값이 저장된 리스트의 가장 마지막 index에 최댓값이 저장된다
first_ch = list(input())
second_ch = list(input())
result = []
for i in range(len(first_ch) + 1):
row = [0] * (len(second_ch) + 1)
result.append(row)
# print(first_ch)
# print(second_ch)
# print(result)
for i in range(1, len(first_ch) + 1):
for j in range(1, len(second_ch) + 1):
if first_ch[i-1] == second_ch[j-1]:
result[i][j] = result[i-1][j-1] + 1 # LCS 길이 저장
else:
result[i][j] = max(result[i-1][j], result[i][j-1]) # LCS의 길이 최댓값 저장
# print(result)
print(result[len(first_ch)][len(second_ch)])


'Baekjoon' 카테고리의 다른 글
| [Baekjoon]백준 11659 구간 합 구하기 4(실버 3) - Python (0) | 2025.01.15 |
|---|---|
| [Baekjoon]백준 12865 평범한 배낭(골드 5) - Python (0) | 2025.01.14 |
| [Baekjoon]백준 2565 전깃줄(골드 5) - Python (0) | 2025.01.12 |
| [Baekjoon]백준 11054 가장 긴 바이토닉 부분 수열(골드 4) - Python (0) | 2025.01.11 |
| [Baekjoon] 백준 11053 가장 긴 증가하는 부분 수열(실버 2) - Python (0) | 2025.01.10 |