프로그래머스 - JadenCase 문자열 만들기

woga·2025년 1월 12일
0

알고리즘

목록 보기
25/26
post-thumbnail

https://school.programmers.co.kr/learn/courses/30/lessons/12951

문제 난이도

Lv 2

문제 내용

문제 설명
JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 단, 첫 문자가 알파벳이 아닐 때에는 이어지는 알파벳은 소문자로 쓰면 됩니다. (첫 번째 입출력 예 참고)
문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요.

제한 조건

  • s는 길이 1 이상 200 이하인 문자열입니다.
  • s는 알파벳과 숫자, 공백문자(" ")로 이루어져 있습니다.
    • 숫자는 단어의 첫 문자로만 나옵니다.
    • 숫자로만 이루어진 단어는 없습니다.
    • 공백문자가 연속해서 나올 수 있습니다.

문제 풀이

일단 제한 조건에 공백문자가 연속해서 나올 수 있다고해서 이에 대한 예외처리를 같이 했다. 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문하고 문자열 배열을 많이 이용해서 푼게 돋보였다.

profile
와니와니와니와니 당근당근

0개의 댓글

관련 채용 정보