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

박선영·2023년 10월 5일
0
post-thumbnail

Lv0_옹알이(1)

📄Description

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

제한 조건

  • 1 ≤ babbling의 길이 ≤ 100
  • 1 ≤ babbling[i]의 길이 ≤ 15
  • babbling의 각 문자열에서 "aya", "ye", "woo", "ma"는 각각 최대 한 번씩만 등장합니다.
    - 즉, 각 문자열의 가능한 모든 부분 문자열 중에서 "aya", "ye", "woo", "ma"가 한 번씩만 등장합니다.
  • 문자열은 알파벳 소문자로만 이루어져 있습니다.

입출력 예시

babblingresult
["aya", "yee", "u", "maa", "wyeoo"]1
["ayaye", "uuuma", "ye", "yemawoo", "ayaa"]3

입출력 예 설명

  1. ["aya", "yee", "u", "maa", "wyeoo"]에서 발음할 수 있는 것은 "aya"뿐입니다. 따라서 1을 return합니다.
  2. ["ayaye", "uuuma", "ye", "yemawoo", "ayaa"]에서 발음할 수 있는 것은 "aya" + "ye" = "ayaye", "ye", "ye" + "ma" + "woo" = "yemawoo"로 3개입니다. 따라서 3을 return합니다.

유의사항

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


🤔생각 정리

  1. 조카가 발음할 수 있는 단어가 포함되어 있는지 확인하는 조건을 생각해야겠네
    • 각 단어는 최대 한 번씩만 등장하니까 for문으로 확인하면 될 것 같아.
  2. replace 함수로 제거하면서 남은 단어가 없으면 발음할 수 있는 단어라고 할 수 있을 것 같네.
    • 그런데 조카가 발음할 수 있는 단어가 완전하게 들어있는지 확인해야 해. -> replace 함수 적용할 때 변환 문자열을 빈칸이 아닌 공백(' ')으로 하면 되겠다.
    • for문이 끝나면 단어의 상태를 확인해서 카운트하면 되겠네.

💡Pseudo Code💡

1. for b in babbling:
2.      단어 제거용 복사 변수 저장 -> cur
3.		for w in 조카가 발음할 수 있는 단어 list:
4.			w가 b에 완전하게 있다면:
5.				cur에서 replace w -> ' '(공백)
6.		cur에 남은 문자가 없다면:
7.			count +1

🖥️코드화

def solution(babbling):
    ans = 0
    for b in babbling:
        cur = b[:] # 확인용 복사
        for w in ('aya', 'ye', 'woo', 'ma'):
            if w in b:
            	# 발음할 수 있는 단어 있다면 제거해서
                cur = cur.replace(w, ' ') 
        # 빈 문자열만 남는다면 카운트
        if not cur.strip(): 
            ans += 1
    return ans

📌코드 비교 및 감상

  1. 정규 표현식 사용
    re 라이브러리의 compile 함수를 사용해 정규표현식으로 쉽게 해결 가능하다. (정규 표현식 공부해보면 유용하게 쓸 수 있을 것 같다. 확실히 코드가 깔끔해진다.)
    그 분들의 코드를 인용해 나의 방식으로 수정했다.
import re

def solution(babbling):
    regex = re.compile('^(aya|ye|woo|ma)+$')
    return sum([1 for b in babbling if regex.match(b)])

추가) 나의 공부를 위한 간단 정규식 정리

표현식의미
^x문자열의 시작. x문자로 시작
x$문자열의 종료. x문자로 종료
.x임의의 한 문자의 자리수 표현
x?존재여부. x문자가 존재할 수도 존재하지 않을 수도 있음
x+x문자의 한 번 이상의 반복
x*반복여부. x문자가 0번 이상 반복
x|yor. x또는 y문자가 존재
(x)그룹. x를 그룹으로 처리
x(n)x문자가 n번 반복
x(n,)x문자가 n번 이상 반복
x(n,m)x문자가 최소 n번 이상 최대 m번 이하 반복
profile
데이터를 만지는 사람

0개의 댓글