1. 문제 설명
머쓱이는 태어난 지 6개월 된 조카를 돌보고 있습니다. 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음을 최대 한 번씩 사용해 조합한(이어 붙인) 발음밖에 하지 못합니다. 문자열 배열 babbling이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 return하도록 solution 함수를 완성해주세요.
2. 제한 사항
- 1 ≤ babbling의 길이 ≤ 100
- 1 ≤ babbling[i]의 길이 ≤ 15
- babbling의 각 문자열에서 "aya", "ye", "woo", "ma"는 각각 최대 한 번씩만 등장합니다.
- 즉, 각 문자열의 가능한 모든 부분 문자열 중에서 "aya", "ye", "woo", "ma"가 한 번씩만 등장합니다.
- 문자열은 알파벳 소문자로만 이루어져 있습니다.
3. 입출력 예
| ["aya", "yee", "u", "maa", "wyeoo"] | 1 |
| ["ayaye", "uuuma", "ye", "yemawoo", "ayaa"] | 3 |
4. 해결 방향
해당 문제가 주어졌을 때, 해결하는 방향으로 크게 2가지가 떠올랐다.
1. 주어진 리스트를 차례대로 조카가 할 수 있는 발음을 제거해 나가고 그 결과가 완전히 제거되었는지 확인하는 방법
2. 조카가 할 수 있는 모든 발음의 경우의 수를 추출해 주어진 리스트의 존재 유무를 확인하는 방법
개인적으로 첫 번째 방법보다 두 번째 방법이 재밌을 거 같아 도전해보았고 해결 과정은 아래와 같다
- 리스트 조합을 추출하는 라이브러리 및 함수 찾아보기
- 해당 함수의 결과값에 기반해 전체 경우의 수를 후보 리스트(candidates)로 정리하기
- 문제에서 주어진 babbling이 후보리스트(candidates)에 있는지 여부 확인 후 answer 값 리턴하기
5. 해결 코드 (결론)
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
6. 해결 과정 속 얻은 내용 정리
1) 리스트 조합을 추출하는 라이브러리 검색
: 구글에 리스트 조합 관련 라이브러리를 검색해보니 intertools을 확인할 수 있었다. 해당 사이트에서 활용하기 적합해 보이는 permutations 함수를 찾았고 해당 내용을 기반으로 문제에 접근하기 시작했다.
※ intertools 라이브러리 설명링크 : https://docs.python.org/ko/3/library/itertools.html
| product('ABCD', repeat=2) | AA AB AC AD BA BB BC BD CA CB CC CD DA DB DC DD |
| permutations('ABCD', 2) | AB AC AD BA BC BD CA CB CD DA DB DC |
| combinations('ABCD', 2) | AB AC AD BC BD CD |
| combinations_with_replacement('ABCD', 2) | AA AB AC AD BB BC BD CC CD DD |
2) 해당 함수 활용법 탐구
: permutations 함수를 간단하게 돌려보니 튜플 형태로 결과값이 도출됨을 확인했다. 원하는 결과값 타입은 튜플의 값들이 모두 합쳐진 하나의 string이기에 추가로 'tuple to string'을 검색해 튜플을 스트링으로 변경하는 방법을 확인했다.
- permutations 함수 기본 사용법 확인

- tuple to string 방법 확인

3) 기존에 정리한 이중반복문 개념 활용해 후보리스트 추출
: 우리가 얻고자 하는 후보리스트 (조카가 말할 수 있는 모든 경우의 수가 담긴 리스트)를 만들기 위해 permutations의 두 번째 인자가 1~4회 반복되어야 하고 각 차수별로 얻은 리스트 값을 최종 리스트에 집어넣는 이중 반복문이 진행되어야 함을 알 수 있었다.

4) 리스트 안에 있는지 해당값 존재 유무를 확인면서 마무리

'python > python_문제풀이' 카테고리의 다른 글
| 프로그래머스_평행 (0) | 2023.01.04 |
|---|---|
| python 문제풀이_이중 반복문을 활용한 구구단 풀이 (0) | 2022.12.08 |
| python 문제풀이_환율 적용해 원화 가격 도출하기 (0) | 2022.12.08 |