[프로그래머스 - 120956] 옹알이(1) 👶

FeelingXD·2022년 12월 28일
0

문제풀이

목록 보기
6/34
post-thumbnail

❓ Problem

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

🤔 How

제한사항
1 ≤ babbling의 길이 ≤ 100
1 ≤ babbling[i]의 길이 ≤ 15
babbling의 각 문자열에서 "aya", "ye", "woo", "ma"는 각각 최대 한 번씩만 등장합니다.
즉, 각 문자열의 가능한 모든 부분 문자열 중에서 "aya", "ye", "woo", "ma"가 한 번씩만 등장합니다.
문자열은 알파벳 소문자로만 이루어져 있습니다.
  • 머쓱이의 조카 는 aya, ye, woo, ma 각 단어를 두번이상 사용할수 없음 (0,1) 번 가능
  • babbling 에서 머쓱이의 조카가 발음 가능 한 단어의 개수를 반환할것.

=>
단어를 조합하여 가능한 단어인지 검사하는 방식을 통해 머쓱이의 조카가 말할수 있는 단어인지 추론함

break 조건✔️

  1. build_str 은 초기값은 '' 인 빈 문자열로 babble의 단어의 철자 (can_babel에 선언)가 [a,y,w,m] 인경우에 대해 각 [aya,ye,woo,ma] 를 build_str에 추가하였습니다. 만약 babble의 단어중 [a,y,w,m] 에 포함되지않는 철자가 나타날 경우 ?를 기본값으로 build_str에 추가하여 while 조건을 탈출하게됩니다.

  2. build_str 과 babble 이 일치하는경우 이경우는 조카가 발음할수있으므로 answer+1 후 조건을 탈출합니다.

  3. babble[len(build_str)] in ban 의경우 이경우는 해당 철자가 2번 이상 나올경우 탈출하는 조건문으로
    ban 리스트에는 사용된 문자가 추가됩니다.


❗ Solve

# 옹알이(1)
def solution(babbling):
    can_babel = {'a': 'aya', 'y': 'ye', 'w': 'woo', 'm': 'ma'}

    answer = 0
    for babble in babbling:
        ban = []
        build_str = ''
        while build_str in babble:
            # break point
            if '?' in build_str:
                break
            if build_str == babble:
                answer += 1
                break
            if babble[len(build_str)] in ban:
                break

            ban.append(babble[len(build_str)])
            build_str += can_babel.get(babble[len(build_str)], '?')

    return answer
profile
tistory로 이사갑니다. :) https://feelingxd.tistory.com/

0개의 댓글