머쓱이는 태어난 지 11개월 된 조카를 돌보고 있습니다. 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음과 네 가지 발음을 조합해서 만들 수 있는 발음밖에 하지 못하고 연속해서 같은 발음을 하는 것을 어려워합니다. 문자열 배열 babbling이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 return하도록 solution 함수를 완성해주세요.
func solution(_ babbling:[String]) -> Int {
let words = ["aya", "ye", "woo", "ma"]
let count = babbling.map {
var result: String = $0
for word in words {
if result.contains(word + word), let range = result.range(of: word) {
result = result.replacingCharacters(in: range, with: " ")
} else {
result = result.replacingOccurrences(of: word, with: " ")
}
}
result = result.replacingOccurrences(of: " ", with: "")
return result.count
}.filter { $0 == 0 }.count
return count
}

if result.contains(word + word)를 체크하지만, 실제로는 연속된 같은 단어가 포함되기만 해도 첫 번째 등장하는 단어만 지우는 문제" "으로 바꾸고 다시 공백" "을 제거하는 로직의 불필요함range(of:)는 word + word에 대한 range가 아닌 word의 첫 등장 위치만 지우게 되어 정확하지 않음func solution(_ babbling: [String]) -> Int {
let words = ["aya", "ye", "woo", "ma"]
var count = 0
for babble in babbling {
var temp = babble
var last = ""
var isValid = true
while !temp.isEmpty {
var matched = false
for word in words {
if temp.hasPrefix(word) {
if last == word {
isValid = false
break
}
temp.removeFirst(word.count)
last = word
matched = true
break
}
}
if !matched {
isValid = false
break
}
}
if isValid {
count += 1
}
}
return count
}
