📃문제설명
머쓱이는 태어난 지 6개월 된 조카를 돌보고 있습니다. 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음을 최대 한 번씩 사용해 조합한(이어 붙인) 발음밖에 하지 못합니다. 문자열 배열 babbling이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 return하도록 solution 함수를 완성해주세요.
📝제한사항
- 1 ≤ babbling의 길이 ≤ 100
- 1 ≤ babbling[i]의 길이 ≤ 15
- babbling의 각 문자열에서 "aya", "ye", "woo", "ma"는 각각 최대 한 번씩만 등장합니다.
- 즉, 각 문자열의 가능한 모든 부분 문자열 중에서 "aya", "ye", "woo", "ma"가 한 번씩만 등장합니다.
- 문자열은 알파벳 소문자로만 이루어져 있습니다.
🪧입출력 예
babbling | result |
["aya", "yee", "u", "maa", "wyeoo"] | 1 |
["ayaye", "uuuma", "ye", "yemawoo", "ayaa"] | 3 |
입출력 예 #1
- ["aya", "yee", "u", "maa", "wyeoo"]에서 발음할 수 있는 것은 "aya"뿐입니다. 따라서 1을 return합니다.
입출력 예 #2
- ["ayaye", "uuuma", "ye", "yemawoo", "ayaa"]에서 발음할 수 있는 것은 "aya" + "ye" = "ayaye", "ye", "ye" + "ma" + "woo" = "yemawoo"로 3개입니다. 따라서 3을 return합니다.
유의사항
- 네 가지를 붙여 만들 수 있는 발음 이외에는 어떤 발음도 할 수 없는 것으로 규정합니다. 예를 들어 "woowo"는 "woo"는 발음할 수 있지만 "wo"를 발음할 수 없기 때문에 할 수 없는 발음입니다.
💻코드
'''
import itertools
def solution(babbling):
pronounce = ["aya", "ye", "woo", "ma"]
talk_baby = []
for i in range(1, 5):
combinations = itertools.combinations(pronounce, i)
for k in combinations:
perm = itertools.permutations(k)
for j in perm:
new_string = ''.join(j)
talk_baby.append(new_string)
cnt=0
for l in babbling:
if l in talk_baby:
cnt+=1
return cnt
'''
import re
def solution(babbling):
regex = re.compile('^(aya|ye|woo|ma)+$')
cnt=0
for i in babbling:
if regex.match(i):
cnt+=1
return cnt
🧑💻공부
위 코드를 단계별로 설명해보면 다음과 같다.
1. pronounce 변수에 ["aya", "ye", "woo", "ma"]라는 리스트를 할당한다. 이 리스트는 발음을 나타내는 문자열들을 포함하고 있다.
2.빈 리스트인 'talk_baby'를 생성한다. 앞으로 이 리스트는 조합과 순열을 통해 생성되는 발음의 조합을 저장할 것이다.
3.1부터 4까지 범위를 반복하는 for 루프를 실행한다. 이 루프는 발음 조합의 길이를 1부터 4까지 하나씩 증가시키며 발음 조합을 생성하기 위한 작업을 한다.
4. 'itertools.combinations(pronounce, i) 를 사용하여 pronounce 리스트에서 길이 i인 발음 조합을 생성한다. 예를 들면, i가 1일 때는 각각의 발음 문자열이 조합을 생성된다.
5. 생성된 발음 조합을 순열로 변환하기 위해 itertools.permutations(k)를 사용한다. k는 조합에서 생성된 발음 조합이다.
6. itertools.permutations(k)를 통해 생성도니 순열을 반복하면서 new_string 변수에 문자열로 변환한다. 이는 발음 조합의 가능한 모든 경우를 담은 문자열이다.
7. new_string을 talk_baby 리스트에 추가한다. 이렇게 하면 모든 발음 조합의 경우가 talk_baby 리스트에 저장된다.
8. babbling 문자열을 순회하면서 각 문자가 talk_baby 리스트에 있는지 확인한다. 그리고 있다면 cnt 변수를 증가시킨다.
9. 최종에는 cnt를 반환한다.
'🐍python3 > Programmers' 카테고리의 다른 글
프로그래머스[코딩테스트 입문]_치킨 쿠폰 (0) | 2023.06.04 |
---|---|
프로그래머스[코딩테스트 입문]_로그인 성공? (0) | 2023.06.04 |
프로그래머스[코딩테스트 입문]_등수 매기기 (0) | 2023.06.04 |
프로그래머스[코딩테스트 입문]_특이한 정렬 (0) | 2023.06.04 |
프로그래머스[코딩테스트 입문]_유한소수 판별하기 (0) | 2023.06.04 |