[프로그래머스] 옹알이 (2)

kiki·2024년 1월 22일
0

프로그래머스

목록 보기
67/79

문제 링크

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

문제 설명

  • 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음과 네 가지 발음을 조합해서 만들 수 있는 발음밖에 하지 못하고 연속해서 같은 발음을 하는 것을 어려워한다.
  • 문자열 배열 babbling이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 return

1차 시도

def solution(babbling):
    possible = ["aya", "ye", "woo", "ma"]
    answer = 0
    for word in babbling:
        flag = False
        before = ""
        while 1:
            if len(word)<=1:
                break
            elif word[:2] in possible:
                if word[:2]==before:
                    flag=True
                    break
                before=word[:2]
                word = word[2:]
            elif word[:3] in possible:
                if word[:3]==before:
                    flag = True
                    break
                before=word[:3]
                word = word[3:]
            else:
                break
        print(word, flag)
        if len(word)==0 and flag==False:
            answer+=1
    
    return answer

모든 예외처리를 해준,,,, 드러운 코드,,,,,
아니 레벨 1 문제가 이렇게 안풀릴리가 없는데 하면서 모든 상황을 다 if문으로 처리해준 셈이다.
에휴....

다른 사람 풀이

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

문제에서 주어진 조건은 네 개의 단어밖에 발음할 수 없다는 것과, 연속해서 같은 단어를 발음할 순 없다는 것이었다.
그러니 연속되는 단어가 있는지 확인하고 없다면 replace로 단어들을 제거해주는 것이다.
그리고 replace할 때 공백으로 치환해주어 치환 후 연속이 아니던 단어를 연속이 되지 않도록 해준다. 그 후 strip으로 공백을 없애고 길이가 0인지 확인한다.

replace와 strip을 잘 쓸 수 있어야한다.
level 1문제는 대체로 함수를 적재적소에 잘 쓰면 되는 것 같다.
나는 그렇지 못했고 ~~

정리

  • replace: str.replace("x","")와 같이 코드를 작성하면 이는 x라는 문자를 모두 ''로 치환하는 것을 의미한다. 만약 치환할 x의 갯수를 지정해주고싶다면 str.replace("x","",2)과 같이 코드를 작성하면 문자열의 앞 2개의 x만 ''으로 치환하게된다.
  • strip: str.strip()은 선행, 후행 공백을 제거하는 함수다. 여기서 인자로 특정 문자를 넘겨주면 해당 문자를 선행 후행에서 제거한다. 그리고 lstrip, rstrip을 이용해 선행만, 후행만 제거할 수 있다.

0개의 댓글