머쓱이는 태어난 지 6개월 된 조카를 돌보고 있습니다. 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음을 최대 한 번씩 사용해 조합한(이어 붙인) 발음밖에 하지 못합니다. 문자열 배열 babbling이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 return하도록 solution 함수를 완성해주세요.
["aya", "yee", "u", "maa", "wyeoo"] 1
["ayaye", "uuuma", "ye", "yemawoo", "ayaa"] 3
해당 문제가 주어졌을 때, 해결하는 방향으로 크게 2가지가 떠올랐다.
주어진 리스트를 차례대로 조카가 할 수 있는 발음을 제거해 나가고 그 결과가 완전히 제거되었는지 확인하는 방법
조카가 할 수 있는 모든 발음의 경우의 수를 추출해 주어진 리스트의 존재 유무를 확인하는 방법
개인적으로 첫 번째 방법보다 두 번째 방법이 재밌을 거 같아 도저해보았고 해결 과정은 아래와 같다
리스트 조합을 추출하는 라이브러리 및 함수 찾아보기
해당 함수의 결과값에 기반해 전체 경우의 수를 후보 리스트(candidates)로 정리하기
문제에서 주어진 babbling이 후보리스트(candidates)에 있는지 여부 확인 후 answer 값 리턴하기
from itertools import permutations
def solution(babbling):
answer = 0
words = ["aya", "ye", "woo", "ma"]
candidates = []
for num in range(len(words)):
words_combi = list(permutations(words, num+1))
for word in words_combi:
candidates.append(''.join(word))
for word in babbling:
if word in candidates:
answer +=1
return answer
: 구글에 리스트 조합 관련 라이브러리를 검색해보니 intertools을 확인할 수 있었다. 해당 사이트에서 활용하기 적합해 보이는 permutations 함수를 찾았고 해당 내용을 기반으로 문제에 접근하기 시작했다.
※ intertools 라이브러리 설명링크 : https://docs.python.org/ko/3/library/itertools.html
: permutations 함수를 간단하게 돌려보니 튜플 형태로 결과값이 도출됨을 확인했다. 원하는 결과값 타입은 튜플의 값들이 모두 합쳐진 하나의 string이기에 추가로 'tuple to string'을 검색해 튜플을 스트링으로 변경하는 방법을 확인했다.
: 우리가 얻고자 하는 후보리스트 (조카가 말할 수 있는 모든 경우의 수가 담긴 리스트)를 만들기 위해 permutations의 두 번째 인자가 1~4회 반복되어야 하고 각 차수별로 얻은 리스트 값을 최종 리스트에 집어넣는 이중 반복문이 진행되어야 함을 알 수 있었다.