머쓱이는 태어난 지 6개월 된 조카를 돌보고 있습니다. 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음을 최대 한 번씩 사용해 조합한(이어 붙인) 발음밖에 하지 못합니다. 문자열 배열 babbling이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 return하도록 solution 함수를 완성해주세요.
babbling | result |
---|---|
["aya", "yee", "u", "maa", "wyeoo"] | 1 |
["ayaye", "uuuma", "ye", "yemawoo", "ayaa"] | 3 |
입출력 예 설명
네 가지를 붙여 만들 수 있는 발음 이외에는 어떤 발음도 할 수 없는 것으로 규정합니다. 예를 들어 "woowo"는 "woo"는 발음할 수 있지만 "wo"를 발음할 수 없기 때문에 할 수 없는 발음입니다.
for
문으로 확인하면 될 것 같아.replace
함수로 제거하면서 남은 단어가 없으면 발음할 수 있는 단어라고 할 수 있을 것 같네.replace
함수 적용할 때 변환 문자열을 빈칸이 아닌 공백(' ')으로 하면 되겠다.for
문이 끝나면 단어의 상태를 확인해서 카운트하면 되겠네.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
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|y | or. x또는 y문자가 존재 |
(x) | 그룹. x를 그룹으로 처리 |
x(n) | x문자가 n번 반복 |
x(n,) | x문자가 n번 이상 반복 |
x(n,m) | x문자가 최소 n번 이상 최대 m번 이하 반복 |