[프로그래머스] 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개의 댓글

관련 채용 정보