나의 답)
import Foundation
func solution(_ my_string:String, _ alp:String) -> String {
return my_string.map { $0 == Character(alp) ? $0.uppercased() : String($0) }.joined()
}
이번 문제는 문자열과 조건문을 활용하여 특정 문자를 대문자로 변환하는 작업이었는데, 해결을 하면서 과정을 한번 적어보려 한다.
문제를 분석해보자면, 주어진 조건은 두 가지였다.
my_string
에서 특정 문자를 찾아야 한다는 점이고문제 자체는 간단해 보였지만 Swift에서 문자열을 다루는 방법과 변환 로직을 효율적으로 구성하는 것이 관건인 문제였다.
처음에는 for-in
루프를 사용해 각 문자를 확인하며 새로운 문자열을 만드는 방법을 떠올렸다.
하지만 Swift에서는 고차함수인 map
을 사용하면 각 문자를 쉽게 변환할 수 있다는 점을 떠올랐고, 이걸 활용하기로 결정했다.
map
은 배열을 변환하는 고차 함수이지만, Swift의 String
도 순회 가능한 컬렉션이기 때문에 적합한 방법이라고 판단이 됐었다.
문자를 비교하고 변환하는 과정은 조건문과 대문자로 변환하는 uppercased()
메서드로 해결했다.
func solution(my_string: String, alp: String) -> String {
return my_string.map { $0 == Character(alp) ? $0.uppercased() : String($0) }.joined()
}
구현 과정에서 중요한 점은
alp
를 Character
로 변환해야 한다는 점과,map
으로 변환된 결과는 배열 형태이기 때문에 joined()
로 다시 문자열로 합쳐야 한다는 점이다.이 방식은 조금 더 간결하고 고차 함수를 잘 활용했다는 점에서 만족스러웠다.
구현한 코드를 테스트하기 위해 검토를 해봤다.
print(solution(my_string: "hello", alp: "l")) // "heLLo"
print(solution(my_string: "swift", alp: "i")) // "swIft"
print(solution(my_string: "apple", alp: "p")) // "aPPle"
모든 테스트에서 기대한 결과가 출력되었다.
다양한 입력 값에 대해서도 잘 작동한다는 점을 확인했다.
이번 문제를 통해 Swift에서 문자열을 다루는 방법과 고차 함수인 map
의 활용법을 다시 한번 점검을 해볼 수 있었고..
조건문과 문자열 조작 같은 기본적인 작업도 간결하고 명확하게 작성하려는 노력이 중요하다는 점을 알게 된 것 같다.