본문 바로가기
Python/알고리즘

[COS PRO 1급 #3-4] 중복 문자열 이어붙이기

by 포푸리 (POPOOLY) 2023. 2. 23.
반응형

문제설명

두 문자열 s1과 s2를 붙여서 새 문자열을 만들려 합니다. 이때, 한 문자열의 끝과 다른 문자열의 시작이 겹친다면, 겹치는 부분은 한 번만 적습니다.

예를 들어 s1 = "ababc", s2 = "abcdab"일 때, 아래와 같이 s1 뒤에 s2를 붙이면 새 문자열의 길이는 9입니다.

 

그러나 s2 뒤에 s1을 붙이면 새 문자열의 길이는 8로, 더 짧게 만들 수 있습니다.

 

두 문자열 s1과 s2가 매개변수로 주어질 때, s1과 s2를 붙여서 만들 수 있는 문자열 중, 가장 짧은 문자열의 길이를 return 하도록 solution 함수를 완성해주세요.

매개변수 설명

두 문자열 s1과 s2가 solution 함수의 매개변수로 주어집니다.

* s1과 s2의 길이는 1 이상 100 이하입니다.
* s1과 s2는 알파벳 소문자로만 이루어져 있습니다.

return 값 설명

| s1      | s2       | return |
|---------|----------|--------|
| "ababc" | "abcdab" | 8      |

문제 코드

# 다음과 같이 import를 사용할 수 있습니다.
# import math

def solution(s1, s2):
    # 여기에 코드를 작성해주세요.
    answer = 0
    return answer

풀이

def solution(s1, s2):
	answer = 200
	length = len(s1) + len(s2)
    
	# s2의 부분 문자열이 s1에 있고, 부분 문자열의 길이가 answer보다 작으면 answer는 부분 문자열의 길이로 대체
	for start in range(len(s2)):
		for finish in range(start+1, len(s2)-start):
			if s2[start:finish] in s1 and length-len(s2[start:finish]) < answer:
            
				# s1과 s2를 붙였을 때의 길이는 s1, s2의 각각의 길이에 겹치는 문자열의 길이를 뺀 값
				answer = length-len(s2[start:finish])
	return answer

댓글