문제: https://school.programmers.co.kr/learn/courses/30/lessons/12951
import Foundation
func solution(_ s: String) -> String {
let arr = s.components(separatedBy:" ") // 1)
var answer: [String] = []
for word in arr {
if let first = word.first { // 2)
if first.isLetter { // 3)
answer.append(word.capitalized)
} else {
answer.append(word.lowercased())
}
} else {
answer.append("") // 공백만 있는 요소 처리
}
}
return answer.joined(separator: " ") // 4)
}
1) 문제 조건의 "공백 문자가 연속해서 나올 수 있습니다", 즉 공백을 있는 갯수대로 유지해서 포함시켜야하므로 components를 사용한다.
components는 split과 달리 공백 문자가 연속으로 나타나면 공백 문자를 포함해서 나눈 배열로 반환해준다.
2) 공백문자인지 아닌지 확인한다. 공백 문자가 아니라면, 첫번째 Character가 문자일 경우 그대로 문제 조건대로 "첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열"을 만들기 위해 capitalized 속성을 활용한다.
3) 첫번째 Character가 알파벳이 아닐 경우, 이어지는 알파벳은 소문자로 사용 --> lowercased() 함수를 통해 전체를 소문자인 문자열로 만들어준다.
또한, 공백은 공백 갯수대로 추가하여 출력해야하므로 공백일 경우에 공백 문자를 배열에 추가한다.
4) 문제조건에 s는 알파벳과 숫자, 공백 문자로 이루어져있음. 즉 공백 문자는 항상 존재하기에
기존 배열들에 구분자 " " 를 붙여 문자열을 출력한다.
오늘 알게 된 점
1. 배열의 최대 / 최소값: Array.max()! Array.min()!
- 클로저를 통해 최대 / 최소값을 판별하는 조건을 지정할 수도 있다.
2. 문자열 배열의 정렬 트릭: Array.joined()를 통해 문자열을 만들어 배열하는 방법도 존재
3. Swift 문자열 관련 함수 정리
isLetter: 해당 Chracter가 문자인지에 대한 bool값을 반환한다. (공백이나 특수문자라면 false 반환)
isNumber: 숫자인지
isUppercase: 대문자인지
isLowercase: 소문자인지
lowercased(): 전체 문자열 소문자로
uppercased(): 전체 문자열 대문자로
capitalize: 함수가 아닌 저장 속성임에 주의 --> 첫 글자를 대문자로, 나머지 글자를 소문자로 만들어주는 속성
이 저장속성에서 주의해야할 점은, 첫 Character가 문자가 아니면 첫 문자를 알아서 찾아서 해당 문자를 바꾸어준다.
components(separatedBy: " ") --> 공백이 연속적으로 나타날때, 공백을 포함하여 나누어준다
'⚙️ 알고리즘 > 문제풀이' 카테고리의 다른 글
[Python] 백준 11559, 프로그래머스 프렌즈4블록, 백준 13460 (0) | 2025.05.14 |
---|---|
[Swift] 백준 15683, 14503 (0) | 2025.05.09 |
[Swift] 백준 1913, 프로그래머스 베스트앨범 (0) | 2025.05.07 |
[Python] 프로그래머스 파일명 정렬, 프로그래머스 H-Index (0) | 2025.05.07 |
[Python] 프로그래머스 가장 큰 수 (0) | 2025.05.05 |