본문 바로가기
알고리즘

LCS (백준 , 9251)

by 민챙이_99 2025. 11. 18.

- 문제 : https://www.acmicpc.net/problem/9251

 

 

1. 알고리즘

문자열 두개를 s1, s2에 입력 받는다. 

dp 테이블을 s1 + 1, s2 + 1 크기 만큼 생성한다. 초기값은 모두 0으로 세팅한다

 

이중 for문을 돌려서 1부터 s1의 크기하고 같을 때까지 돌려서 dp 테이블을 채운다. 

for문안에는 2개의 조건이 존재한다. 

 

1) 값이 매칭되는 경우, 대각선에 있는 값에서 +1을 한다. 

2) 값이 매칭되징 않는 경우, 왼쪽이나 위쪽에 있는 값중에서 제일 큰 값을 가져와서 세팅한다

 

출력은 DP[s1.length][s2.length] 만큼 하면 된다. 

 

2. 시간 복잡도

시간복잡도는 이중 for문으로 s1길이 * s2길이이다.

s1의 길이를 N, s2의 길이를 M이라고 표현한다면, 시간 복잡도는 O(NM)이 된다. 

 

따라서, s1이 가질 수 있는 최대 길이는 10^3임으로 10^3 * 10^3으로 총 10^6이 필요하다.

10^8의 0.1초는 10^7임으로 해당 풀이과정으로 시간내에 푸는 것이 가능하다. 

 

3.  결과

https://github.com/moonlight-duck/study-algorithms/pull/28

 

[민주] LCS 문제풀이 by min-99 · Pull Request #28 · moonlight-duck/study-algorithms

📌 문제 정보 문제 링크 : https://www.acmicpc.net/problem/9251 카테고리 (예: 구현, 탐색, DP) : LCS(DP) ✏️ 풀이 방법 결과 (성공/실패) : 성공 풀이 시간 : study 2h, cooding 5m 풀이 방법 : https://min-99.tistory.com/41

github.com