문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.
class Solution { fun solution(s: String): String { var answer = "" var wordRoom = "" for (i in 0..s.lastIndex) { wordRoom += s[i] //한 캐릭터씩 넣다가 if (s[i] == ' ' || i == s.lastIndex) { //캐릭터가 공백이거나 마지막 캐릭터라면 for (j in 0..wordRoom.lastIndex) { //저장된 wordRoom에서 if (j % 2 != 0) { //홀-소, 짝-대 넣기 answer += wordRoom[j].toLowerCase() } else answer += wordRoom[j].toUpperCase() } wordRoom = "" //임시 변수 초기화하기 } } return answer } }
- s에 한 캐릭터씩 접근한다. 그러다가 공백이 나오면 하나의 단어라고 판단하고, 홀/짝수 판별을 하여 소/대문자 처리를 한다.
- 마지막 단어일 경우 공백이 아니라 마지막 캐릭터일 경우로 조건을 두어(i == s.lastIndex) 마지막 단어까지 처리한다.
class Solution { fun solution(s: String) = s.split(" ").joinToString(" ") { word -> word .mapIndexed { index, char -> if (index % 2 == 0) char.toUpperCase() else char.toLowerCase() } .joinToString("") } }
- s.split(" ") : 먼저 공백을 기준으로 단어를 나눈다.
- joinToString(" ") { word -> ... } : 나누어진 부분 문자열에 대해 작업을 수행하고, 그 결과를 공백을 기준으로 연결한다.
- word.mapIndexed { index, char -> ... } : word에 들어가 있는 각 문자에 대해 람다 함수를 적용한다.
- index : 문자 인텍스(0, 1, 2 ...)
- char : 문자(t, r, y...)
- 그 이후 홀/짝수에 따라 소/대문자 처리를 한 뒤 joinToString("")을 사용하여 빈 문자열 기준으로 합쳐 단어를 만든다.
[TIL-240305]