99클럽 코테 스터디 2일차 TIL - 문자열 분석 문제 해결

피터·2025년 4월 1일
0

📌 TIL (Today I Learned) - reduce(into:)를 활용한 문자 개수 세기

✅ 오늘의 학습 키워드

  • Swift 고차 함수 (reduce(into:))
  • 문자열 탐색 및 문자 개수 세기
  • switch-case 문을 활용한 가독성 향상
  • reduce vs reduce(into:) 성능 차이

1. 99클럽 코테 스터디 2일차 - 문자열 분석 문제 해결

오늘은 백준 10820번 문제를 풀었다. 문자열에서 소문자, 대문자, 숫자, 공백 개수 세기 문제를 해결했다.
초기에는 for 루프를 사용하여 각 문자를 검사했지만, 이를 더 Swift스럽게 작성하기 위해 reduce(into:)를 활용하는 방식으로 최적화했다.


2. 기존 방식과 개선 방식 비교

🔹 기존 방식 (for 루프)

func countCharacters(in input: String) {
    var lower = 0, upper = 0, number = 0, white = 0

    for c in input {
        if c.isLowercase { lower += 1 }
        else if c.isUppercase { upper += 1 }
        else if c.isNumber { number += 1 }
        else if c.isWhitespace { white += 1 }
    }

    print("\(lower) \(upper) \(number) \(white)")
}

✅ 문제점:
• 여러 if-else 문이 가독성을 저하함
• 각 문자에 대해 여러 조건을 확인해야 하므로 성능 저하 가능


🔹 개선된 방식 (reduce(into:) 활용)

func countCharacters(in input: String) {
    let counts = input.reduce(into: (lower: 0, upper: 0, number: 0, white: 0)) { result, c in
        switch c {
        case _ where c.isLowercase: result.lower += 1
        case _ where c.isUppercase: result.upper += 1
        case _ where c.isNumber: result.number += 1
        case _ where c.isWhitespace: result.white += 1
        default: break
        }
    }

    print("\(counts.lower) \(counts.upper) \(counts.number) \(counts.white)")
}

✅ 개선된 점:

  • reduce(into:)를 사용하여 배열을 생성하지 않고 직접 값을 수정 → 메모리 효율 증가
  • switch-case 문을 활용하여 가독성 향상
  • if-else 중첩을 제거하여 더 깔끔한 코드 구조

  1. reduce(into:) vs reduce(::) 차이점
비교 항목reduce(::)reduce(into:)
반환값새로운 값 반환기존 값을 수정
성능새로운 값을 계속 생성 → 메모리 낭비 가능기존 값을 변경하므로 성능 최적화
활용 예시array.reduce(0) { $0 + $1 }array.reduce(into: &result) { $0 += $1 }

🚀 reduce(into:)를 사용하면 불필요한 메모리 할당을 줄여 성능 최적화 가능!


📝 오늘의 회고

❓ 어떤 문제가 있었고, 나는 어떤 시도를 했는지?

  • 처음엔 for 루프와 if-else를 사용하여 문제를 해결했지만 코드가 길어지고 비효율적이었다.
  • Swift의 고차 함수 (reduce(into:))를 활용하면 더 깔끔한 코드 작성이 가능할 것 같아서 이를 적용해봤다.

🔍 어떻게 해결했는지?

  • reduce(into:)를 사용하여 성능을 최적화했다.
  • switch-case를 활용하여 가독성을 개선했다.
  • 불필요한 if-else 조건문을 줄여 코드를 더 명확하게 만들었다.

🌟 무엇을 새롭게 알았는지?

  • reduce(into:)를 사용하면 성능을 높일 수 있다.
  • switch-case는 if-else보다 가독성을 높이는 데 도움이 된다.
  • Swift에서는 가독성과 성능을 동시에 고려하는 것이 중요하다!
profile
iOS 개발자입니다.

0개의 댓글