본문 바로가기

코테 공부/python

[프로그래머스] Python 옹알이(1) 정규표현식.. 나중에 더 보기

https://school.programmers.co.kr/learn/courses/30/lessons/120956

그래 뭐.. 구현 되었음 되었지 뭐..

def solution(babbling):
    cando = ["aya", "ye", "woo", "ma"]
    count = 0
    for bab in babbling:

        while len(bab) >= 0:

            if len(bab) == 0:
                count += 1
                break          
            elif len(bab) >= 3 and bab[:3] in cando:
                bab = bab[3:]
            elif len(bab) >=2 and bab[:2] in cando:
                bab = bab[2:]
            else:
                break

    return count

 

타풀이

왜 조건을 이렇게 줬을까 if w * 2 not in b:

여기서 이 조건에 걸러지는게 의미가 있나? 조카가 최대 한 번씩 사용해 조합한 발음밖에 못해서 가 의도인거 같긴 한데

근데 저건 문자열이 두번 연속해서 나와야 하는거라 떨어져서 두번 나오면 의미가 없지 않나

애초에 문제 조건이 babbling 의 각 문자열에서 저 조카가 구현 가능한 옹알이가 각각 최대 한번씩만 등장한다고 되어있는데..

뭐 조금이라도 걸러진다고 치고

저렇게 replace로 했을 때 w가 없는 경우 본래 문자열 그대로 남는다는거 replace 함수 파악이 덜되서 이번에 알았다.

def solution(babbling):
    c = 0
    for b in babbling:
        for w in [ "aya", "ye", "woo", "ma" ]:
            if w * 2 not in b:
                b = b.replace(w, ' ')
        if len(b.strip()) == 0:
            c += 1
    return c

저기서 replace 로 ' ' 공백이 아니라 아예 지워 버리면 되지 않나 ''  했더니 그렇게 되면 중간에 word를 지우고 앞뒤로 붙었을때 또 가능한 word가 의도치 않게 만들어질 수 있기 때문에 안된다.

저 if문 (if w * 2 not in b:)은 불필요한듯 하여 지우고 실행해보니 잘 통과 되었다.

def solution(babbling):
    count = 0
    for bab in babbling:
        for word in [ "aya", "ye", "woo", "ma" ]:
            bab = bab.replace(word, ' ')
        if len(bab.strip()) == 0:
            count += 1
    return count

 

또 다른 풀이

이건 또 뭐람... 정규표현식 가져온건가....

import re

def solution(babbling):
    regex = re.compile('^(aya|ye|woo|ma)+$')
    cnt=0
    for e in babbling:
        if regex.match(e):
            cnt+=1
    return cnt