Algorithm (Python, Java, SQL)/BaekJoon

[백준 9251번] LCS (Python)

sanadoing_ 2023. 8. 9. 18:34
728x90

> 파이썬, 문자열, 다이나믹 프로그래밍

 

 

 

 

 

📖 문제 : LCS (Python)

 

LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다.

예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다.

 

 

 

입력

첫째 줄과 둘째 줄에 두 문자열이 주어진다. 문자열은 알파벳 대문자로만 이루어져 있으며, 최대 1000글자로 이루어져 있다.

 

출력

첫째 줄에 입력으로 주어진 두 문자열의 LCS의 길이를 출력한다.

 

예제 입력 1 

ACAYKP
CAPCAK

 

예제 출력 1 

4
 

 

내 코드

a = input()
b = input()
board = [[0] * (len(b) + 1) for _ in range(len(a) + 1)]

for i in range(len(a)):
    for j in range(len(b)):
        if a[i] == b[j]:
            board[i + 1][j + 1] = board[i][j] + 1

        else:
            board[i + 1][j + 1] = max(board[i + 1][j], board[i][j + 1])

print(board[-1][-1])

 

 

Point ! ⭐️ 

  • 사실 이 문제 풀이 좀 참고했음.

이런 식으로

1) 같은 글자가 나오면 왼쪽 위에 대각선 방향의 값에서 + 1 

2) 다른 글자가 나오면 왼쪽이나 위에 있는 값 중 큰 값으로 

 

하여 가장 큰 수를 출력해주면 된다. 

 

 

 

 

 

 

 

백준

https://www.acmicpc.net/problem/9251

 

9251번: LCS

LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다. 예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다.

www.acmicpc.net

 

728x90