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
728x90
'Algorithm (Python, Java, SQL) > BaekJoon' 카테고리의 다른 글
[백준 2573번] 빙산 (Python) (26) | 2023.08.10 |
---|---|
[백준 2812번] 크게 만들기 (Python) (2) | 2023.08.10 |
[백준 15903번] 카드 합체 놀이 (Python) (0) | 2023.08.09 |
[백준 2493번] 탑 (Python) (0) | 2023.08.09 |
[백준 1263번] 시간 관리 (Python) (0) | 2023.08.09 |