# PRG-JadenCase 문자열 만들기
문제 정리
풀이
func solution(_ s:String) -> String {
let s = s.components(separatedBy: " ")
var words: [[Character]] = []
var upperWords: [[Character]] = []
var upperSentences = ""
// 전체 소문자로 변경
// [String] -> [[Character]] 로 변경
s.map { $0.lowercased() }.forEach { words.append(Array($0)) }
// 첫 글자만 대문자로 변경
words.forEach { word in
var upperWord: [Character] = []
for i in 0..<word.count {
if i == 0 {
upperWord.append(contentsOf: word[i].uppercased())
} else {
upperWord.append(word[i])
}
}
upperWords.append(upperWord)
}
// 문자 합치기
upperWords.forEach { word in
upperSentences.append(String(word))
upperSentences.append(" ")
}
upperSentences.removeLast()
return upperSentences
}
공백이 어디에 있을 지 모르는 문장이 입력이 들어오는데, 공백은 건드리지 말고 단어마다 첫글자만 대문자로 바꿔줘야 하는 문제였다.
생각한 방법은
1. 모두 소문자로 변경
2. substring을 위해 [String] -> [[Character]] 로 변경
3. 반복문으로 돌며 단어마다 첫글자만 대문자로 변경
4. 첫글자가 대문자로 변경된 단어들을 다시 합침
5. 4에서 생긴 마지막 공백 제거
문제없이 정상적으로 올 패스 하는 듯 했으나, 테스트 15만 실패..
다른 사람들 풀이를 보니 다들 테스트 케이스때문에 고생하는 듯 했다. 공백으로만 가득 찬 케이스, 첫글자가 공백인 경우 등 공백 관련 설명이 너무 부족한 문제였던 것 같다.
테스트 케이스를 추가해가며 추리해봤지만 여기서 만족하기로 했다😞
풀고나서 알게된 것
항상 문자열 관련 문제는 substring을 어떻게 할지 고민하다가 시간을 많이 날리는 것 같다.
앞으로는 성능 관련 이슈가 없을 것 같다면 일단 [[Character]] 로 바꿔서 풀어봐야겠다.
'알고리즘' 카테고리의 다른 글
[알고리즘] 구간 합, 누적 합(Prefix Sum) (0) | 2024.03.11 |
---|---|
[백준] BOJ-14889 스타트와 링크 (0) | 2022.11.27 |
[백준 BOJ] BOJ -2309 일곱 난쟁이 (0) | 2022.09.18 |
[백준 BOJ] BOJ-1018 체스판 다시 칠하기 (0) | 2022.09.18 |
[백준 BOJ] BOJ-8393 합 (0) | 2022.09.18 |