TIL: Swift에서 문자열 패턴 찾기 (String Pattern Matching)

jeongmuyamette·2024년 12월 3일

TIL

목록 보기
10/72
post-thumbnail

TIL: Swift에서 문자열 패턴 찾기 (String Pattern Matching)

📝 학습 내용: ranges(of:) 메서드 활용

1. 기본 문법

import Foundation

// 문자열에서 특정 패턴의 등장 횟수를 찾는 함수
func solution(_ myString: String, _ pat: String) -> Int {
    let ranges = myString.ranges(of: pat)
    return ranges.count
}

2. ranges(of:) 메서드 이해하기

  • 반환 타입: [Range<String.Index>]
    • 문자열 내에서 발견된 모든 패턴의 범위를 배열로 반환
  • 사용 목적: 문자열 내에서 특정 패턴이 등장하는 모든 위치를 찾기 위해 사용
  • 특징: 겹치는 패턴도 모두 찾아냄

3. 동작 예시

let text = "banana"
let pattern = "ana"

/*
검색 과정:
 ┌───┐
 banana  -> 첫 번째 "ana" 발견 (인덱스 1-3)
   ┌───┐
 banana  -> 두 번째 "ana" 발견 (인덱스 3-5)
*/

4. 실제 사용 예시

// 테스트 케이스
print(solution("banana", "ana"))  // 출력: 2
print(solution("aaaa", "aa"))     // 출력: 3

5. 주의사항

// ❌ 잘못된 사용: ranges를 직접 반환
func wrongSolution(_ myString: String, _ pat: String) -> Int {
    return myString.ranges(of: pat)  // 타입 불일치 오류!
}

// ✅ 올바른 사용: count를 반환
func correctSolution(_ myString: String, _ pat: String) -> Int {
    return myString.ranges(of: pat).count
}

6. 다른 문자열 처리 메서드들

  • contains(_:): 패턴 포함 여부 확인
  • components(separatedBy:): 패턴을 기준으로 문자열 분리
  • replacingOccurrences(of:with:): 패턴을 다른 문자열로 교체

7. 장점

  • 코드가 간결하고 가독성이 좋음
  • Swift 내장 기능으로 최적화되어 있음
  • 유니코드 문자도 올바르게 처리
  • 시간 복잡도: O(n) (n은 문자열 길이)

8. 활용 시나리오

  • 텍스트 분석
  • 패턴 매칭
  • 문자열 검색 기능 구현
  • 중복 문자열 카운팅

🔍 참고 자료

✨ 오늘의 배운 점

  1. ranges(of:)를 사용하면 복잡한 문자열 패턴 매칭을 쉽게 구현할 수 있다
  2. 반환 타입을 정확히 이해하고 사용하는 것이 중요하다
  3. Swift의 내장 문자열 처리 메서드들을 활용하면 코드를 더 효율적으로 작성할 수 있다

0개의 댓글