머쓱이는 태어난 지 6개월 된 조카를 돌보고 있습니다. 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음을 최대 한 번씩 사용해 조합한(이어 붙인) 발음밖에 하지 못합니다. 문자열 배열 babbling이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 return하도록 solution 함수를 완성해주세요.
| babbling | result |
|---|---|
| ["aya", "yee", "u", "maa", "wyeoo"] | 1 |
| ["ayaye", "uuuma", "ye", "yemawoo", "ayaa"] | 3 |
def solution(babbling):
key = ["aya", "ye", "woo", "ma"] # 발음할 수 있는 것
answer = 0
for b in babbling:
temp = b # 임시저장
for k in key:
temp = 't'.join(temp.split(k))
if set(temp) == set('t'): # 't'만 들어있으면 발음할 수 있는 단어이다.
answer += 1
break
return answer
이 문제를 해결할 때, 각 문자열에 대해 발음할 수 있는 옹알이(key)를 제거하고 남는 문자열이 공백('')이면 발음할 수 있는 것으로 보았다. 그렇게 풀기 위해 2중 반복문과 문자열을 split 후 공백으로 join하는 방법을 사용했다.
하지만 문제가 발생했는데, 예를 들어 y'aya'e 에서 aya를 ''으로 대체하면 'ye'가 되어 맞는 결과가 나올 수 없기 때문이다. (aya -> ye 순으로 진행할 때) 실제로는 y, e로 발음할 수 없는 결과인데도 말이다.
따라서, 이를 해결하기 위해 join 시 ''이 아닌 다른 문자인 't'를 사용하였다.
import re
def solution(babbling):.
regex = re.compile('^(aya|ye|woo|ma)+$')
cnt=0
# 입력된 문자열 리스트를 순회하며 정규표현식에 매치되는 경우 카운터 증가
for e in babbling:
if regex.match(e):
cnt+=1
return cnt
내 코드에서는 발음할 수 있는 옹아리를 순차적으로 없애는 방식이었다. 하지만 정규표현식을 활용하면 입력된 문자열 리스트를 순회하며 매칭될 때 카운팅하는 방식으로 해결할 수 있다.
기본 문법을 활용하는 것만으로는 효율적이고, 직관적인 코드를 구성하는 것이 어려움을 다시 한 번 체감할 수 있었다. 앞으로 코딩테스트를 공부하며 알게된 내용 또한 흘려보내지 않고 공부해 활용할 수 있도록 노력해야겠다.
잘 읽고 갑니다. 깔끔하게 잘 푸신 것 같아요!