[프로그래머스] 이상한 문자 만들기

creativeBin·2022년 12월 29일
0

문제 설명

문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.

제한 사항

  • 문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.
  • 첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.

입출력 예

sreturn
"try hello world""TrY HeLlO WoRlD"

입출력 예 설명

"try hello world"는 세 단어 "try", "hello", "world"로 구성되어 있습니다. 각 단어의 짝수번째 문자를 대문자로, 홀수번째 문자를 소문자로 바꾸면 "TrY", "HeLlO", "WoRlD"입니다. 따라서 "TrY HeLlO WoRlD" 를 리턴합니다.

풀이

1) 단락별 split
2) split 배열 내 공백 제거
3) 짝수, 홀수 구분 후 string add
4) 단락 끝날 때마다 공백 추가
5) 맨 마지막 공백 trim()으로 돌렸는데 테스트케이스 통과 실패
6) substr 적용 후 해결완료

class Solution {
    fun solution(s: String): String {

        var answer = ""                     
        s.split(" ").map {
            var b = it.split("").filter{ it != ""}                                        
            b.forEachIndexed { index, data ->
                if(index % 2 == 0) answer += data.uppercase() else answer += data.lowercase()
            }
            answer += " "
        }
        return answer.substring(0, answer.length - 1)
    }
}

다른 사람 풀이 (이 방법이 더 간단해보이긴 하네..)

class Solution {
    fun solution(s: String) =
        s.split(" ").joinToString(" ") { word ->
            word
                .mapIndexed { index, char -> 
                    if (index % 2 == 0) char.toUpperCase() else char.toLowerCase()
                }
                .joinToString("")
        }
}
profile
언제나 항상 즐겁게 New vibes 😎

0개의 댓글