Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- hackerrank
- Object Detection
- 입문
- TEAM-EDA
- 3줄 논문
- Python
- 추천시스템
- 엘리스
- Semantic Segmentation
- 협업필터링
- 한빛미디어
- DilatedNet
- MySQL
- eda
- Recsys-KR
- 큐
- 프로그래머스
- 튜토리얼
- 스택
- 나는리뷰어다
- DFS
- TEAM EDA
- pytorch
- 나는 리뷰어다
- 코딩테스트
- Image Segmentation
- Segmentation
- 파이썬
- Machine Learning Advanced
- 알고리즘
Archives
- Today
- Total
TEAM EDA
[엘리스] 두 문자열 사이의 거리 본문
두 문자열 사이의 거리
두 문자열 s1, s2가 주어진다. 이제 s1에서 문자 하나를 추가하거나 제거할 수 있으며, 이를 반복함으로써 s2를 얻고싶다고 하자. 예를 들어, s1 = “abc”, s2 = “bdcf” 라고 하면, s1에서 a를 제거하고 d를 추가, 그리고 f를 추가하면 s2를 얻을 수 있다. 즉, 다음과 같은 경로로 s1에서 s2를 얻을 수 있다.
$“abc” -> “bc” -> “bdc” -> “bdcf”$
두 문자열 s1, s2 사이의 거리란, s1에서 s2를 만들기 위해 필요한 문자 삽입, 삭제 횟수의 최소값으로 정의된다. 예를 들어, s1 = “abc”, s2 = "bdcf"라면, 두 문자열의 거리는 3이다. 왜냐하면, s1에서 문자의 추가 및 삭제를 3번 하면 s2를 얻을 수 있기 때문이며, 이보다 더 적은 연산을 통해서는 s2를 얻을 수 없다.
두 문자열이 주어질 때, 두 문자열 사이의 거리를 출력하는 프로그램을 작성하시오.
입력
첫 번째 줄에 문자열 s1, 두 번째 줄에 문자열 s2가 주어진다. 문자열의 길이는 2000을 넘지 않는다.
출력
두 문자열 사이의 거리를 출력한다.
입력 예시
abc
bdcf
출력 예시
3
풀이
- abc, bdcf의 최대 공통 부분의 수열의 길이를 계산
- LCS : "bc"
- abc에서 LCS를 제외한 a를 변경해야 함
- bcdf에서 LCS를 제외한 d,f를 변경해야 함
- 즉, (len(abc) - LCS) + (len(bcdf) - LCS) = len(abs) + len(bcdf) - 2LCS
import sys
def LCS(s1, s2):
'''
1. 마지막이 겹치는 경우
- T[i][j] = T[i-1][j-1] + 1
2. 그렇지 않은 경우
- max(T[i-1][j], T[i][j-1])
'''
T = [[0 for i in range(len(s2)+1)] for i in range(len(s1)+1)]
for i in range(1, len(s1)+1):
for j in range(1, len(s2)+1):
if s1[i-1] == s2[j-1] :
T[i][j] = T[i-1][j-1] + 1
else :
T[i][j] = max(T[i-1][j], T[i][j-1])
return T[len(s1)][len(s2)]
def strDistance(s1, s2) :
'''
((첫번째 문자열의 길이) - LCS) + ((두번째 문자열의 길이) - LCS)
'''
lcs = LCS(s1, s2)
return len(s1) + len(s2) - 2 * lcs
def main():
'''
이 부분은 수정하지 마세요.
'''
s1 = input()
s2 = input()
print(strDistance(s1, s2))
if __name__ == "__main__":
main()
출처 : 엘리스 아카데미, https://academy.elice.io/learn
'EDA Study > 알고리즘' 카테고리의 다른 글
[엘리스] 유치원 소풍 (0) | 2020.03.29 |
---|---|
[엘리스] 팰린드롬 (0) | 2020.03.29 |
[엘리스] 최대 공통 부분 수열 (0) | 2020.03.29 |
[엘리스] N-Queen (0) | 2020.03.29 |
[엘리스] 가로수 (0) | 2020.03.29 |