[Swift][프로그래머스] 옹알이(2) - 문자열 탐색 메서드

팔랑이·2024년 6월 7일
0

iOS/Swift

목록 보기
23/71
post-thumbnail

프로그래머스 : 옹알이(2) - 문제 링크


처음에 전제조건을 제대로 못 보고 두개씩만 붙여서 contains를 썼다가 틀렸고, 그 다음엔 switch-case문 써서 하는데 잘 안되기도 하고, 이게 맞나 싶어서 이런걸 탐색해주는 메서드가 있나 찾아보게 되었다.

그리고 실제로 있었음. 문자열을 탐색해주는 메서드들이...

오늘은 이것들에 대해서 알아보려고 한다.


문자열 탐색 메서드

1. hasPrefix()

hasPrefix() 메서드는 문자열이 특정 접두사로 시작하는지 확인할 때 사용한다. 이 메서드는 Bool 값을 반환하는데, 문자열이 해당 접두사로 시작하면 true, 아니면 false를 반환한다.

let greeting = "Hello, world!"

if greeting.hasPrefix("Hello") {
    print("문자열이 'Hello'로 시작함") //true
} else {
    print("문자열이 'Hello'로 시작하지 않음") //false
}

2. hasSuffix()

hasSuffix() 메서드는 문자열이 특정 접미사로 끝나는지 확인할 때 사용하며, hasPrefix()와 같이 Bool 값을 반환한다.

let fileName = "photo.jpg"

if fileName.hasSuffix(".jpg") {
    print("이 파일은 JPG 이미지 파일임") //true
} else {
    print("이 파일은 JPG 이미지 파일이 아님") //false
}

3. contains()

이건 이전에도 다뤘던 것 같고 잘 쓰고 있지만, 포함하여 다시...
contains()는 문자열이 특정 문자열을 포함하고 있는지 확인할 때 사용

let message = "Swift is awesome!"

if message.contains("awesome") {
    print("메시지에 'awesome'이 포함되어 있음")
} else {
    print("메시지에 'awesome'이 포함되어 있지 않음")
}

4. starts(with:)

starts(with:) 은 문자열이 특정 문자열로 시작하는지 확인할 때 사용해. hasPrefix()와 유사하지만, 배열에도 사용할 수 있다.

let names = ["Alice", "Bob", "Charlie"]

if names.starts(with: ["Alice", "Bob"]) {
    print("이 배열은 'Alice', 'Bob'으로 시작함") //true
} else {
    print("이 배열은 'Alice', 'Bob'으로 시작하지 않음") //false
}

5. ends(with:)

starts(with:)과 같이 배열에도 사용할 수 있으며, 문자열이 특정 문자열로 끝나는지 확인할 때 사용한다.

let names = ["Alice", "Bob", "Charlie"]

if names.ends(with: ["Bob", "Charlie"]) {
    print("이 배열은 'Bob', 'Charlie'로 끝남") //true
} else {
    print("이 배열은 'Bob', 'Charlie'로 끝나지 않음") //false
}

hasPrefix(), removeFirst() 사용한 풀이

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
}

진짜 이런문제 싫다 생각하면서 꾸역꾸역 풀었다.
근데 정답 나오고 다른사람 풀이를 봤더니, 더 쉬운 방법이 있었는데...?!

보러가기

profile
정체되지 않는 성장

0개의 댓글