문제 소개
유명한 다이나믹 프로그래밍 문제인 LCS(Longest Common Subsequence) 문제를 풀어보았다.
문제 풀이
이 블로그... 너무 설명을 잘해주셨다. 아래와 같이 Subsequence를 탐색하면 된다.
1. LCS 2차원 배열 선언
2차원 배열을 선언해준다. first와 second의 첫글자를 가져와서 변수명을 지었다.
let f = Array(readLine()!)
let s = Array(readLine()!)
var lcs = Array(repeating: Array(repeating: 0, count: s.count + 1), count: f.count + 1)
2. LCS 구하기
값이 같다면 lcs[i-1][j-1] + 1로 lcs배열에 적용하고, 값이 다르다면 lcs[i][j] = max(lcs[i-1][j], lcs[i][j-1])를 배열에 적용해준다.
for i in 1...f.count {
for j in 1...s.count {
if f[i-1] == s[j-1] {
lcs[i][j] = lcs[i-1][j-1] + 1
} else {
lcs[i][j] = max(lcs[i-1][j], lcs[i][j-1])
}
}
}
정답 코드
let f = Array(readLine()!)
let s = Array(readLine()!)
var lcs = Array(repeating: Array(repeating: 0, count: s.count + 1), count: f.count + 1)
for i in 1...f.count {
for j in 1...s.count {
if f[i-1] == s[j-1] {
lcs[i][j] = lcs[i-1][j-1] + 1
} else {
lcs[i][j] = max(lcs[i-1][j], lcs[i][j-1])
}
}
}
print(lcs[f.count][s.count])
역시 풀때마다 감탄이 나오는 다이나믹 프로그래밍...
'→ Problems' 카테고리의 다른 글
[Algorithm] 백준 - 6549번 히스토그램에서 가장 큰 직사각형 (Swift) (0) | 2024.08.15 |
---|---|
[Algorithm] 백준 - 11444번 피보나치 수 6 (Swift) (0) | 2024.08.13 |
[Algorithm] 백준 - 18870번 좌표 압축 (Swift) (0) | 2024.08.13 |
[Algorithm] 백준 - 13560번 축구 게임 (Swift) (0) | 2024.08.12 |
[Algorithm] 백준 - 1074번 Z (Swift) (0) | 2024.07.29 |