huginn muninn

[프로그래머스] 옹알이1 파이썬 본문

코딩테스트

[프로그래머스] 옹알이1 파이썬

_maddy 2023. 10. 9. 19:38

 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

옹알이 할 수 있는 단어는 ["aya", "ye", "woo", "ma"] 뿐, 이 4단어의 조합으로 만든 단어는 옹알이 할 수 있다. 즉 ayaye, ayawoo도 옹알이 할 수 있다. 주어진 babbling 리스트의 각 문자열에서는 "aya", "ye", "woo", "ma"가 한 번씩만 등장한다. 

내가 이해한 바로는 ayaaya도 안되고, ayayeayaye도 안되는 것으로 이해하였다. 주어진 리스트 내 단어에서 발음할 수 있는 단어의 개수를 세어보자.(근데 코드 돌려보면 ayayeayaye 과 같은 경우 고려하지 않아도 통과됨;)

 

내가 생각한 방법은 3가지이다. 

 

방법 1. 주어진 리스트 내 단어를 하나씩 검토하며 지워나가기, 반복될 시 다음 배열로 넘어가기.

방법 2. 미리 옹알이 할 수 있는 단어를 조합해 말할 수 있는 단어 리스트를 만들어놓은 후 일치하는지 체크하기.

방법 3. 미리 단어 반복 체크 후 2번이상 옹알이 단어가 들어가면 리스트에서 * 로 바꾸고 나중에 체크할 때 제외될 수 있도록 하기. 

 

 

나는 방법 2을 택했다. 

 

def solution(babbling):
    count=0
    cnt=0

    for i in range(len(babbling)):#반복되는 단어 발견 시 *로 바꾸기
        for j in ['aya','ye','woo','ma']:
            count=babbling[i].count(j)
            if count>1:
                babbling[i]='*'
                break

    for word in babbling:#옹알이 단어에 해당되면 ' ' 으로 바꾸기
        for i in ['aya','ye','woo','ma']:
            word=word.replace(i,' ')
        if word!='*' and len(word.strip())==0:#*이 아니면서 strip 처리한 후 길이가 0인 것들만 count
            cnt+=1

    return cnt

😱주의할 점😱

 

1. ayaaya 만 안되는 게 아니라 ayayeaya 같은 경우도 안됨. 

근데 이 경우 따지지 않아도 프로그래머스에서 맞게 처리하고 있다; 왜지