[LV.1] 이상한 문자 만들기

Heedon Ham·2024년 5월 28일
0
post-thumbnail

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

제한사항

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

입출력 예

sreturn
"try hello world""TrY HeLlO WoRlD"

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


단순 해결: 문자열 전체 한바퀴 반복문

문자열 내 각 문자의 index를 판단해서 해당 index가 짝수이면 대문자로, 홀수이면 소문자로 변환해서 결과값에 추가한다.

import Foundation

func solution(_ s:String) -> String {
    var result = ""
    var startIdx = 0
    for spell in s {
        if startIdx % 2 == 0 {
            result.append(String(spell).uppercased())
        } else {
            result.append(String(spell).lowercased())
        }
        startIdx += 1
        if spell == " " {
            startIdx = 0
        }
    }
    return result
}

components, enumerated, map 활용

각 단어로 분리 후, enumerated를 활용해 offset을 쉽게 파악, 각 offset의 element에 변화주기

import Foundation

func solution(_ s:String) -> String {

	let transformed = s.components(separatedBy: " ").map { $0.enumerated().map { $0.offset % 2 == 0 ? $0.element.uppercased() : $0.element.lowercased() } }
    
    //예시의 경우: transformed = [["T", "r", "Y"], ["H", "e", "L", "l", "O"], ["W", "o", "R", "l", "D"]]
    //각 배열 element 내 문자들을 하나의 단어로 결합, 그 후 각 단어 사이 빈 공백을 포함해서 문자열로 만들기
    
    return transformed.map { $0.joined() }.joined(separator: " ")
}
profile
dev( iOS, React)

0개의 댓글