문제
프로그래머스 / JadenCase
1) 문제 풀이
func solution(_ s:String) -> String {
var parts = s.split(separator: " ").map{ String($0) }
for (i, part) in parts.enumerated() {
let result = part.enumerated().map { (i, j) in
if i == 0 {
return j.uppercased()
} else {
return j.lowercased()
}
}.joined()
parts[i] = result
}
return parts.joined(separator: " ")
}
결과

2) 코드 개선
❌ 실패 사유
- 중복된 공백처리가 없음 =>
omittingEmptySubsequences 사용
func solution(_ s:String) -> String {
var parts = s.split(separator: " ", omittingEmptySubsequences: false).map{ String($0) }
for (i, part) in parts.enumerated() {
let result = part.enumerated().map { (i, j) in
if i == 0 {
return j.uppercased()
} else {
return j.lowercased()
}
}.joined()
parts[i] = result
}
return parts.joined(separator: " ")
}
결과

3) 코드 개선 2
❌ 문제점 분석
- 비효율적인 문자 변환 =>
enumerated().map을 매번 사용하여 각 글자를 다시 처리함
- 문자열 자체가 빈 문자열일 때 처리가 없음 => 입력이
""일 경우도 그대로 통과하지만, 코드 내 split 이후 로직에서 문제가 될 가능성
✅ 개선 포인트
lowercased() 선처리 => 모든 문자를 먼저 소문자로 만들어 일관성 유지
first.uppercased() + dropFirst() => 한 글자만 대문자로, 나머지는 소문자 그대로 유지
func solution(_ s:String) -> String {
return s
.lowercased()
.split(separator: " ", omittingEmptySubsequences: false)
.map { word in
guard let first = word.first else { return "" }
return first.uppercased() + word.dropFirst()
}
.joined(separator: " ")
}
결과
