문제 출처 : https://school.programmers.co.kr/learn/courses/30/lessons/12951<
난이도 : Level.2
언어 : Kotlin
문제 설명 :
JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 단, 첫 문자가 알파벳이 아닐 때에는 이어지는 알파벳은 소문자로 쓰면 됩니다. (첫 번째 입출력 예 참고)
문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요.
제한 사항 :
- s는 길이 1 이상 200 이하인 문자열입니다.
- s는 알파벳과 숫자, 공백문자(" ")로 이루어져 있습니다.
- 숫자는 단어의 첫 문자로만 나옵니다.
- 숫자로만 이루어진 단어는 없습니다.
- 공백문자가 연속해서 나올 수 있습니다.
입출력 예 :
s | return |
"3people unFollowed me" | "3people Unfollowed Me" |
"for the last week" | "For The Last Week" |
풀이 :
class Solution {
fun solution(s: String): String = s.lowercase().split(" ").joinToString(" ") { it.replaceFirstChar { it.uppercase() } }
}
String.capitalize()
라는 함수가 있다. 해당 함수는 문자열의 첫 번째 문자를 upperCase로 바꿔서 리턴해주지만, deprecated되었다.
capitalize() 대신, replaceFirstChar를 사용하라고 한다.
s.lowercase().split(" ").map { it.capitalize() }
s.lowercase().split(" ").map { it.replaceFirstChar { if (it.isLowerCase()) it.titlecase(Locale.getDefault()) else it.toString() } }
조언대로 자동변환을 실행하면 다음과 같이 된다.
왜 이렇게 길어지고 로케일이 나오는가에 대해서는 다음 주소에서 참고하면 좋다.
요는 다음과 같다.
고정 로케일에 따라 대소문자의 표기가 다르기 때문이다.
예를 들어
1. 독일어 문자 "ß"는 소문자만 존재해왔다. 이를 대문자로 바꾸는 방법은 없다.
2. 세르보크로아티아어인 "DŽ"는 두 글자 같지만 단일 문자로 취급된다. 만약 기존 capitalize()의 애매한 변환식으로는 "Dž" 다음과 같이 변경 될 것이다. 하지만 이는 틀렸다. 해당 문자의 소문자는 "dž"이고, "Dž"는 제목 케이스라는 또 다른 글자라고 한다.. 다음 글자에 대한 설명은 다음 주소를 확인하면 좋다.
https://en.wikipedia.org/wiki/D%C5%BE
'프로그래머스 > Level 2' 카테고리의 다른 글
[Lv. 2] 예상 대진표 (0) | 2023.07.12 |
---|---|
[Lv. 2] 카펫 (0) | 2023.07.12 |
[Lv. 2] 피보나치 수 (0) | 2023.07.11 |
[Lv. 2] 이진 변환 반복하기 (0) | 2023.07.11 |
[Lv. 2] 최댓값과 최솟값 (0) | 2023.07.11 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!