9251-Swift알고리즘

2024. 3. 17. 16:54·알고리즘

오랜만에 돌아온 알고리즘 솔루션정리!!!

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

 

9251번: LCS

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

www.acmicpc.net

오늘의 문제이다! LCS최장 공통 부분 수열을 구하라는 문제!

어떻게 구하면 될까?

1. 맨 마지막문자열부터 비교를 해보면 된다. 

예를들어 이렇게 있을때 만약 맨마지막 문자열이 같다? 하면 이전까지의 최장공통부분수열의 개수 + 1이다.

즉 LCS(i,j) = LCS(i-1, j-1) + 1 이라는 점화식이 나오게 된다. 

그렇다면 다를때는 어떻게 할까? 두번째 사진과 같이K를 끼거나 E를끼거나 혹은 둘다 안끼거나의 방법으로 둘다 함께 낄순 없다. 만약 K를 뺀다고 하면 K를 뺀 나머지 4개의 LCS를 구하면 되는거고 E를 뺀다고 하면 E를 뺀 4개의 LCS를 구하면 된다. 

max(LCS(i,j-1) , LCS(i-1,j-1))이것이 답이 되는것이다. 

//
//  main.swift
//  9251
//
//  Created by 235 on 3/17/24.
//

import Foundation

let a = readLine()!.map{String($0)}
let b = readLine()!.map{String($0)}
var dp = Array(repeating: Array(repeating: 0, count: b.count+1), count: a.count+1)
for i in 1...a.count {
    for j in 1...b.count {
        if a[i-1] == b[j-1] {
            dp[i][j] = dp[i-1][j-1] + 1
        } else {
            dp[i][j] = max(dp[i-1][j], dp[i][j-1])
        }
    }
}
print(dp[a.count][b.count])

code로 나타내면 이렇게 된다! 처음에 DP라는 것을 몰라 조금찾아봤지만 .....담엔 풀수 있을듯 싶다 제발

'알고리즘' 카테고리의 다른 글

상담원인원-Swift풀이  (1) 2024.11.12
17298-Swift백준골드4  (3) 2024.10.08
Queue 10845 - swift  (1) 2023.09.05
1259 - swift로풀기  (0) 2023.09.05
파괴되지 않은 건물 - pYthon  (2) 2023.06.19
'알고리즘' 카테고리의 다른 글
  • 상담원인원-Swift풀이
  • 17298-Swift백준골드4
  • Queue 10845 - swift
  • 1259 - swift로풀기
2료일
2료일
좌충우돌 모든것을 다 정리하려고 노력하는 J가 되려고 하는 세미개발자의 블로그입니다. 편하게 보고 가세요
  • 2료일
    GPT에게서 살아남기
    2료일
  • 전체
    오늘
    어제
    • 분류 전체보기 (124) N
      • SWIFT개발 (29)
      • 알고리즘 (25)
      • Design (6)
      • ARkit (1)
      • 면접준비 (32) N
      • UIkit (3)
      • Vapor-Server with swift (3)
      • 디자인패턴 (5)
      • 반응형프로그래밍 (12)
      • CS (3)
      • 도서관 (2)
  • 인기 글

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
2료일
9251-Swift알고리즘
상단으로

티스토리툴바