Kotlin 대/소문자 변환
toUpperCase / toLowerCase
내 풀이 => 실패
class Solution {
fun solution(s: String): String {
var answer = ""
s.mapIndexed{
i, n -> if( i%2 ==0 || i ==0 ) answer += n.toUpperCase() else answer += n.toLowerCase()
}
return answer
}
}
문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.
이게 문제인 것 같은데
문자열 전체로 본 인덱스가 아니고 "try hello world" 면 "try" 에서의 짝/홀수, "hello"에서의 짝/홀수?
힌트
.split(" ")
"try", " hello", " world" 로 나누어졌다.
공백도 따로 나누어져야지 짝/홀수 구분할 수 있는거 아닌가
어쨌든 저대로 for문에 돌려보니까 공백은 인식하지 못한 채로 문자열로 합쳐진다.
변환은 됐는데 공백을 어떻게 되돌리지
내 풀이 2 => 실패
class Solution {
fun solution(s: String): String {
var answer = ""
var s = s.split(" ")
for((i, ss) in s.withIndex()) {
for((j, sss) in ss.withIndex()) {
if(j ==0 || j %2 ==0) {
answer += sss.toUpperCase()
} else {
answer += sss.toLowerCase()
}
}
answer +=" "
}
return answer
}
}
제일 끝에 공백이 한 번 더 들어갔다.
생략된 for문을 채워넣을 때 나뉘어진 각 문자열을 돌고 난 뒤 한 번씩 더해준게 마지막에도 더 더해줘서 그런 것 같다.
마지막 문자는 어떻게 빼지?
maxIndex 를 구해서 제거해줘야되나?
내 풀이 3
class Solution {
fun solution(s: String): String {
var answer = ""
var s = s.split(" ")
for((i, ss) in s.withIndex()) {
for((j, sss) in ss.withIndex()) {
if(j ==0 || j %2 ==0) {
answer += sss.toUpperCase()
} else {
answer += sss.toLowerCase()
}
}
if(i != s.size-1 ) answer +=" "
}
return answer
}
}
마지막 인덱스 돌 때는 공백을 더해주지 않았다.
실행 시간이 어마무시하게 오래 걸렸다 🤯🤯🤯🤯
다른 사람 풀이
class Solution {
fun solution(s: String) =
s.split(" ").joinToString(" ") { word ->
word
.mapIndexed { index, char ->
if (index % 2 == 0) char.toUpperCase() else char.toLowerCase()
}
.joinToString("")
}
}
봐도 모르겠다....
joinToString 은 컬렉션을 지정된 문자를 각각에 넣어서 문자열로 만드는거 아닌가? split 한 의미가뭐지,,,
레벨이 높아지니까 너무 막힌다.
다른 순서로 바꿔봐야겠다.
먼소린지 모르겠지만 알고리즘 이건 무작정 푸는게 아닌 것 같다 어떤 함수를 써라 라고 까지 했는데 이걸 어떻게 넣어야할지 모르겠는걸 😒 해야할게 계속 늘어나네
'코딩테스트' 카테고리의 다른 글
프로그래머스 | 제일 작은 수 제거하기 | Kotlin (1) | 2024.01.23 |
---|---|
프로그래머스 | 3진법 뒤집기 | Kotlin (0) | 2024.01.19 |
프로그래머스 | 행렬의 덧셈 | Kotlin | 다시풀기++ (0) | 2024.01.16 |
프로그래머스 | 직사각형 별찍기 | Kotlin (1) | 2024.01.11 |
프로그래머스 | 문자열 다루기 기본 | Kotlin (0) | 2024.01.09 |