Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬으로 주어진 문자 조합으로 만들 수 있는 단어 찾기

이 글에서는 주어진 문자 집합을 사용해 만들 수 있는 단어를 출력하는 파이썬 프로그램을 살펴보겠습니다. 여기서는 참조 단어들이 담긴 리스트 하나와, 단어를 구성하는 데 사용할 문자들이 담긴 또 다른 리스트를 입력으로 받습니다.

아래 프로그램에서는 두 개의 함수를 정의합니다. 첫 번째 함수는 문자 목록의 글자들을 이용해 단어를 구성할 수 있는지 판단하기 위한 기준을 마련하고, 두 번째 함수는 만들어진 단어가 주어진 단어 목록에 속하는지 확인하여 매칭합니다.

예제 코드

def Possible_Words(character):
    x = {}
    for n in character:
        x[n] = x.get(n, 0) + 1
    return x

def character_set(w, character):
    for char in w:
        value = 1
        m = Possible_Words(char)
        for k in m:
            if k not in character:
                value = 0
            else:
                if character.count(k) != m[k]:
                    value = 0
        if value == 1:
            print(char)

data = ['fat','tap','day','fun','man','ant','bag','aim']
words = ['m','t','e','d','f','a','p','y','i']
character_set(data, words)

코드 설명

Possible_Words 함수는 단어 하나를 인자로 받아 그 단어에 포함된 각 문자의 등장 횟수를 딕셔너리 형태로 반환합니다. 예를 들어 'fat'이 입력되면 {'f': 1, 'a': 1, 't': 1}과 같은 결과가 나옵니다.

character_set 함수는 단어 목록과 문자 목록을 차례대로 검사합니다. 각 단어를 구성하는 모든 문자가 문자 목록에 존재하고, 필요한 개수만큼 충분히 들어 있는지 확인한 뒤, 조건을 만족하는 단어만 화면에 출력합니다.

실행 결과

위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.

fat
tap
day
aim

참고: Counter를 활용한 더 간결한 방법

파이썬 표준 라이브러리인 collections.Counter를 사용하면 동일한 로직을 훨씬 간결하게 작성할 수 있습니다.

from collections import Counter

def character_set(words, characters):
    char_count = Counter(characters)
    for word in words:
        word_count = Counter(word)
        if all(char_count[k] >= v for k, v in word_count.items()):
            print(word)

data = ['fat','tap','day','fun','man','ant','bag','aim']
words = ['m','t','e','d','f','a','p','y','i']
character_set(data, words)

Counter는 문자별 개수를 자동으로 계산해 주므로 직접 딕셔너리를 만드는 번거로움이 사라지고, 가독성과 유지보수 측면에서도 유리합니다. 실무에서는 이처럼 표준 라이브러리를 적극 활용하는 것이 좋습니다.