https://school.programmers.co.kr/learn/courses/30/lessons/12951
Lv 2
문제 설명
JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 단, 첫 문자가 알파벳이 아닐 때에는 이어지는 알파벳은 소문자로 쓰면 됩니다. (첫 번째 입출력 예 참고)
문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요.
제한 조건
일단 제한 조건에 공백문자가 연속해서 나올 수 있다고해서 이에 대한 예외처리를 같이 했다. BLANK 기준으로 Split했을때 String이 Empty로 나올 수 있으니까 아래처럼 짰다.
class Solution {
fun solution(s: String): String {
val BlANK = " "
val EMPTY = ""
return s.split(BlANK).map {
if (it.isEmpty()) {
EMPTY
} else {
val str = it.lowercase()
str.replaceRange(0, 1, str[0].uppercase())
}
}.joinToString(BlANK)
}
}
그리고 다른 사람 풀이를 보니까 이를 간편하게 capitalize
로 풀었는데 1.5에서부터는 deprecated 됐다고하니 잘 쓰도록 하자
fun solution(s: String): String {
return s.toLowerCase().split(" ").map {
it.capitalize()
}.joinToString(" ")
}
코멘트를 보다가 이런 추상화된 함수 사용은 시간측정이 더 오래걸린다는 말을 봤는데 이건 진짜다. 내가 직접 for 문짜서 돌리는 것보다 편리한 함수 사용은 시간 초과
날 일이 많아서 눈치를 보고 써야하긴 하다 (경험담)
지금 같은 문제는 쉬운 문제라서 나도 여러 함수를 썼지만 ㅎ 대부분 케이스가 13~15ms가 나오기도 했다는 점...
다른 분들은 flat하게 for문하고 문자열 배열을 많이 이용해서 푼게 돋보였다.