본문 바로가기
알고리즘/프로그래머스

프로그래머스-옹알이

by nyeongha 2024. 1. 9.

문제 설명

머쓱이는 태어난 지 6개월 된 조카를 돌보고 있습니다. 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음을 최대 한 번씩 사용해 조합한(이어 붙인) 발음밖에 하지 못합니다. 문자열 배열 babbling이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 return하도록 solution 함수를 완성해주세요.

 

입출력 예 설명

입출력 예 #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합니다.

 

제한사항

1 ≤ babbling의 길이 ≤ 100

1 ≤ babbling[i]의 길이 ≤ 15

babbling의 각 문자열에서 "aya", "ye", "woo", "ma"는 각각 최대 한 번씩만 등장합니다.

, 각 문자열의 가능한 모든 부분 문자열 중에서 "aya", "ye", "woo", "ma"가 한 번씩만 등장합니다.

문자열은 알파벳 소문자로만 이루어져 있습니다.

유의사항

네 가지를 붙여 만들 수 있는 발음 이외에는 어떤 발음도 할 수 없는 것으로 규정합니다. 예를 들어 "woowo" "woo"는 발음할 수 있지만 "wo"를 발음할 수 없기 때문에 할 수 없는 발음입니다.

 


처음에 아무생각없이 i=i.replace(j,'')로 했다.

그런데 이렇게 하게되면 i가 wyeoo이고,j가 ye일때 j부분을 빈칸으로 치환하게 될경우 woo만남아서 조카가 발음 가능한 단어인 woo로 판단되는 오류가 생긴다.

이러한 오류때문에 i의 길이를 재고,발음가능한 단어를 순회할때 i안에 j가 있는경우 i안에 있는 j를 '_'*(j길이)로 치환했다.

그러면 w_ _oo가 되어 발음을 할수없다고 판단하고 다음 i로 넘어가게된다.

각 i의 now리스트 순회가 끝나고 i가 '_'*(i의 길이)와 같다면 발음 가능한 단어라고 판단하여  answer에 1을 더해준다.

def solution(babbling):
    answer = 0
    now=["aya","ye","woo","ma"]		#이 조합의 단어만 사용가능
    for i in babbling:		#주어진 단어를 순회하면서
        c=len(i)	#i의 길이를 c에 담고
        for j in now:		#now를 순회하면서
            if i == '_' * c:	#이미 _*c라면
                break		#반복문을 나온다.
            if j in i:		#i안에 j가 있다면
                cj=len(j)	#cj변수에 j의 길이를 담아
                i=i.replace(j,'_'*cj)	#i안에 있는 j를 모두 '_'*cj로 치환해준다.
        if i=='_'*c:	#해당 i의 순회가 끝나고,i가 '_'*c라면 발음 가능한 단어이기에
            answer+=1	#answer에 1을 더해준다.
    return answer

 

"aya", "ye", "woo", "ma"가 최대 한 번씩만 등장하기때문에 순열로도 구현해보았다.

리스트길이가 4이므로 1개로만 이루어진 순열부터 4개로 이루어진 순열을 구했다.

from itertools import permutations

def solution(babbling):
    pm=["aya","ye","woo","ma"]
    pm2=[]
    answer=0
    for a in range(1,len(pm)+1):	#1-4
        for b in permutations(pm,a):	#permutation(리스트,순열을 구성하는 요소의 갯수)
            pm2.append(''.join(b))	#b는 리스트이므로 모든 요소들을 붙이는 ''.join(b)수행후 pm2에 추가한다.
    for i in babbling:	#babbling을 돌면서
        if i in pm2:	#i가 pm2에 존재한다면
            answer+=1	#answer에 1을 더해준다.
    return answer