def solution(babbling):
answer = 0
for word in babbling:
# 1. 옹알이 숫자로 치환하기
word = word.replace("aya", "1")
word = word.replace("ye", "2")
word = word.replace("woo", "3")
word = word.replace("ma", "4")
# 2. 옹알이 유효성 검사
if word.isdigit():
for i in range(len(word)-1):
if word[i] == word[i+1]: break
else:
answer += 1
continue
else:
continue
return answer
조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음만 가능하다.
좀 더 쉽게 유효성 검사를 하기 위해 옹알이를 문자열 숫자로 바꿔주었다.
"aya" → "1"
"ye" → "2"
"woo" → "3"
"ma" → "4"
word = word.replace("aya", "1")
word = word.replace("ye", "2")
word = word.replace("woo", "3")
word = word.replace("ma", "4")
조카가 발음할 수 있는 단어의 조건
1) 네 가지 발음
"aya", "ye", "woo", "ma"
과 이것을 조합한 발음
2) 단, 반복되는 발음이어서는 안됨. ("yeye"는 불가능, "yemaye"는 가능)
만약, 발음가능한 단어들의 조합으로 이루어져있다면 1단계 치환을 거치고 난 뒤 모든 문자는 정수일것이다.
ex) "ayayeaya"
→ "121"
발음할 수 없는 단어가 하나라도 있다면 알파벳이 남아있게 된다.
ex) "yes"
→ "2s"
따라서, 1단계 이후에 문자는 모두 정수이어야 발음가능하다.
if word.isdigit():
"yemaye"는 가능하지만, "yeye"처럼 같은 발음이 연속으로 중복되어서는 안된다.
for i in range(len(word)-1):
if word[i] == word[i+1]: break
else:
answer += 1
for문을 사용하여 연속으로 중복된 정수가 있는지 확인하였다.
예를들어 "aya"가 연속으로 중복되었는지 확인하려면, 문자열에 "ayaaya"가 하나라도 있는지 확인하면 된다.
"ayaayaayaaya", "ayaaya" 모두 "ayaaya"가 하나라도 있으므로 발음불가능한 단어이다.
# 예시1
for j in ['aya','ye','woo','ma']:
if j*2 not in i:
i=i.replace(j,' ')
# 예시2
if "ayaaya" in b or "yeye" in b or "woowoo" in b or "mama" in b:
continue
첫 시도
def solution(babbling):
answer = 0
for word in babbling:
for ex in ["aya", "ye", "woo", "ma"]:
word = word.replace(ex, "", 1)
if word == "":
answer += 1
return answer
연속해서 같은 발음을 하지 못한다는 것을 간과했다...
위의 코드는 "yeye"도 발음가능하다고 판단하므로 잘못된 코드이다.
replace()는 원본값을 변경하지 않고 바뀐 값을 리턴한다.
따라서 replace()의 반환값을 다시 변수에 할당해주어야 한다.
word = word.replace("aya", "1")
str = str.replace("abc", "")
처음에 문제 요구사항을 잘못이해해서 연속된 문자도 발음가능하도록 했다. 요구사항 분석을 꼼꼼히 하자.
풀이 방법을 떠올리는것은 쉬웠으나 연속으로 반복될수 없는 조건을 코드로 구현하는데 오래 걸렸다. 구현하는 연습을 계속하자.