프로그래머스 : 옹알이(2) - 문제 링크
처음에 전제조건을 제대로 못 보고 두개씩만 붙여서 contains를 썼다가 틀렸고, 그 다음엔 switch-case문 써서 하는데 잘 안되기도 하고, 이게 맞나 싶어서 이런걸 탐색해주는 메서드가 있나 찾아보게 되었다.
그리고 실제로 있었음. 문자열을 탐색해주는 메서드들이...
오늘은 이것들에 대해서 알아보려고 한다.
hasPrefix()
메서드는 문자열이 특정 접두사로 시작하는지 확인할 때 사용한다. 이 메서드는 Bool 값을 반환하는데, 문자열이 해당 접두사로 시작하면 true, 아니면 false를 반환한다.
let greeting = "Hello, world!"
if greeting.hasPrefix("Hello") {
print("문자열이 'Hello'로 시작함") //true
} else {
print("문자열이 'Hello'로 시작하지 않음") //false
}
hasSuffix()
메서드는 문자열이 특정 접미사로 끝나는지 확인할 때 사용하며, hasPrefix()
와 같이 Bool 값을 반환한다.
let fileName = "photo.jpg"
if fileName.hasSuffix(".jpg") {
print("이 파일은 JPG 이미지 파일임") //true
} else {
print("이 파일은 JPG 이미지 파일이 아님") //false
}
이건 이전에도 다뤘던 것 같고 잘 쓰고 있지만, 포함하여 다시...
contains()
는 문자열이 특정 문자열을 포함하고 있는지 확인할 때 사용
let message = "Swift is awesome!"
if message.contains("awesome") {
print("메시지에 'awesome'이 포함되어 있음")
} else {
print("메시지에 'awesome'이 포함되어 있지 않음")
}
starts(with:)
은 문자열이 특정 문자열로 시작하는지 확인할 때 사용해. hasPrefix()
와 유사하지만, 배열에도 사용할 수 있다.
let names = ["Alice", "Bob", "Charlie"]
if names.starts(with: ["Alice", "Bob"]) {
print("이 배열은 'Alice', 'Bob'으로 시작함") //true
} else {
print("이 배열은 'Alice', 'Bob'으로 시작하지 않음") //false
}
starts(with:)
과 같이 배열에도 사용할 수 있으며, 문자열이 특정 문자열로 끝나는지 확인할 때 사용한다.
let names = ["Alice", "Bob", "Charlie"]
if names.ends(with: ["Bob", "Charlie"]) {
print("이 배열은 'Bob', 'Charlie'로 끝남") //true
} else {
print("이 배열은 'Bob', 'Charlie'로 끝나지 않음") //false
}
import Foundation
func solution(_ babbling: [String]) -> Int {
let can = ["aya", "ye", "woo", "ma"]
var count = 0
for word in babbling {
var tempWord = word
var lastBabble = ""
var isValid = true
while !tempWord.isEmpty && isValid {
var matched = false
for babble in can {
if tempWord.hasPrefix(babble) {
if lastBabble == babble {
isValid = false
break
} else {
tempWord.removeFirst(babble.count)
lastBabble = babble
matched = true
break
}
}
}
if !matched {
isValid = false
}
}
if isValid && tempWord.isEmpty {
count += 1
}
}
return count
}
진짜 이런문제 싫다 생각하면서 꾸역꾸역 풀었다.
근데 정답 나오고 다른사람 풀이를 봤더니, 더 쉬운 방법이 있었는데...?!