728x90
조건
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" |
알고리즘 예상
- split을 이용해 s를 " "을 기준으로 나눈 다음 첫 원소를 toUpperCase(), 나머지 원소를 toLowerCase()를 사용해 바꾼다.
- joinToString(" ")을 이용해 처음 나눴던 s를 다시 합친다.
초기 코드
class Solution {
fun solution(s: String): String {
var answer = ""
return answer
}
}
내 코드
class Solution76 {
fun solution(s: String): String = s.split(" ").map {
it.map { it }.mapIndexed { i, c ->
if (i == 0) c.toUpperCase()
else c.toLowerCase()
}.joinToString("")
}.joinToString(" ")
}
크게 어렵지는 않았다.
다른 사람의 풀이
class Solution {
fun solution(s: String): String {
return s.toLowerCase().split(" ").map {
it.capitalize()
}.joinToString(" ")
}
}
class Solution {
fun solution(s: String): String {
var answerbuilder = StringBuilder()
var space = true
for(c in s) {
if(space && c != ' ') {
space = false
answerbuilder.append(c.toUpperCase())
}
else {
if(c == ' ')
space = true
answerbuilder.append(c.toLowerCase())
}
}
return answerbuilder.toString()
}
}
개선점 또는 배운점
- 첫 풀이의 capitalize()라는 메서드는 1.5부터 deprecated되어 사용되지 않는다고 한다. 내 코드가 capitalize()를 대체하는 코드라고 생각한다.
- 아래 풀이는 StringBuilder와 반복문을 이용해 풀었다. Split을 사용하지 않고 space라는 변수를 이용해 해당 문자가 띄어쓰기 다음에 오는 첫 문자인지를 검사했다.
728x90
'TIL > 알고리즘' 카테고리의 다른 글
| 03/25 알고리즘 공부 - 프로그래머스 Lv.0(1) (0) | 2024.03.25 |
|---|---|
| 03/25 알고리즘 공부(77) - 이진 변환 반복하기 (0) | 2024.03.25 |
| 03/22 알고리즘 공부(75) - 최댓값과 최솟값 (1) | 2024.03.22 |
| 03/21 알고리즘 공부(74) - 신고 결과 받기 (0) | 2024.03.21 |
| 03/20 알고리즘 공부(73) - 공원 산책 (0) | 2024.03.20 |