문제



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

생각

  1. aya, ye, woo, ma로 구성된 piece 배열을 만든다
  2. 브루트포스는 안될것 같다. 4x4=16가지로 생각했는데 babbling[i]의 최대 길이는 15까지 가능하기 때문이다
  3. piecee에서 조합 가능한 경우를 찾지 말고 단어를 받아서 검사하자
  4. babbling에 들어있는 글자는 1개짜리 단위는 없기 때문에 최소 2개씩 split해서 piece 안에 들어가있는지 확인
  5. 2개씩 split해서 piece 배열에 있는 단어이면 (=옹알이로 발음할수 있는 단어이면) cnt를 1 올린다
  6. 5번에서 막히면 3개씩 split한다

시도

def solution(babbling):
    piece = ["aya","ye","woo","ma"]
    
    for i in range(0,15):
        for j in range(0,len(babbling[i]),2):
                yoso = babbling[j]
                j+=1
        if yoso in piece:
            answer+=1
        else:
            for k in range(0,len(babbling[i]),3):
                if yoso in piece:
                    answer+=1
                k+=1
        i+=1

    answer = 0
    return answer

틀린 이유

  • IndexError : range(0,15)로 고정 금지 -> 길이가 15보다 작은 배열은 에러가남

  • 슬라이싱 잘못됨 : word[j:j+2] 와 같이 작성해야 알파벳 2개 단위로 쪼갤수 있음

  • 초기화 오류 : answer 변수가 제일 아래에 선언됨

  • for문에서는 i를 수기로 증가시킬 필요가 없음....(바본가)

    정답

    def solution(babbling):
       answer = 0
       words = ["aya", "ye", "woo", "ma"]
    
       for b in babbling:
           for w in words:
               # 단어 내 발음 가능한 조각을 공백(" ")으로 대체
               b = b.replace(w, " ")
    
           # 공백을 모두 제거했을 때 남은 문자열이 없으면 발음 가능한 단어
           if b.strip() == "":
               answer += 1
    
       return answer

복습 포인트

strip() 은 문자열의 앞뒤 공백을 지워준다
문자열이 words 배열에 해당하면 하나씩 공백으로 처리하는데, 이때 .replace()를 사용한다

profile
여기 초과학기가 확정되어 울면서 학교를 다니는 사람이 있습니다.

0개의 댓글