주어진 문자열을 구성하기 위해 필요한 최소 요소 개수를 구하려면 'set' 연산자, 'combinations' 메서드, 'issubset' 메서드와 간단한 반복문을 활용하면 됩니다.
예제
아래는 이에 대한 데모입니다.
from itertools import combinations
my_list = ["python", "is", "fun", "to", "learn"]
print("The list is :")
print(my_list)
my_target_str = "onis"
my_result = -1
my_set_string = set(my_target_str)
complete_val = False
for value in range(0, len(my_list) + 1):
for sub in combinations(my_list, value):
temp_set = set(ele for subl in sub for ele in subl)
if my_set_string.issubset(temp_set):
my_result = value
complete_val = True
break
if complete_val:
break
print("The result is :")
print(my_result)
출력
The list is : ['python', 'is', 'fun', 'to', 'learn'] The result is : 2
설명
필요한 패키지(itertools의 combinations)가 환경에 임포트됩니다.
문자열 리스트가 정의되고 콘솔에 출력됩니다.
구성하고자 하는 목표 문자열이 별도로 정의됩니다.
목표 문자열은 집합(set)으로 변환되어 비교 대상이 됩니다.
0부터 리스트 길이까지 값을 늘려가며 반복하고, 각 단계에서 리스트 요소들의 모든 조합(combinations)을 생성합니다.
각 조합에 포함된 문자열들을 하나의 집합으로 합칩니다.
'issubset' 메서드를 사용하여 목표 문자열의 집합이 해당 조합의 집합 안에 포함되는지 확인합니다.
포함된다면 결과 변수에 현재 조합의 크기를 저장하고, 완료 플래그를 'True'로 설정한 뒤 반복문을 종료합니다.
조합의 크기를 작은 값부터 순서대로 검사하므로, 처음으로 조건을 만족하는 값이 곧 최소 요소 개수입니다. 예제에서는 목표 문자열 "onis"를 만들기 위해 최소 2개의 요소("python"과 "is")가 필요하므로 결과로 2가 출력됩니다.