개인 공부/프로그래머스

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

임구마🍠 2024. 7. 5. 22:37


 

쉬워보이는데 질문하기가 왜이렇게 많지..?😳

하며 풀었다가 나도 와라라랅 틀림^^ㅋ

문제를 자세히 보면 제한 사항에 "문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다."

라고 친절하게 나와있었다.. 이말은 즉, 공백을 기준으로 인덱스가 다시 0부터 시작한다는 의미!

역시 문제를 잘 읽어봐야..

 

 

나의 풀이

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

- 문자열 s를 반복문을 돌려 각 요소가 공백인지 구분

- 공백일 경우 결과값에 공백 추가 및 문제 제한 사항과 같이 공백을 기준으로 인덱스가 다시 0부터 시작해야하므로 i = 0 초기화

- 공백이 아닐 경우 인덱스 i를 짝/홀수 경우에 따라 대/소문자 처리 후 결과값에 추가, i += 1 인덱스 증가

 

 

고차함수 풀이

func solution(_ s:String) -> String {
    let result = s.components(separatedBy: " ").map { $0.enumerated().map { $0.offset % 2 == 0 ? $0.element.uppercased() : $0.element.lowercased() } }
    return result.map { $0.joined() }.joined(separator: " ")
}

- " " 공백을 기준으로 나누어 enumerated() 처리를 통해 배열의 인덱스와 배열의 요소 둘 다 사용

- 인덱스 접근: offset  /  값 접근: element

- 처리하고 나면 result는 2차원 배열 형태이기 때문에, map으로 접근해서 합쳐주고, 합쳐진 값들은 공백을 다시 넣어줘야 하므로 " " 추가

 

 

💡실행 결과 비교

더보기

1. 나의 풀이 실행 결과

 

2. 고차함수 풀이 실행 결과

- 고차함수 풀이는 코드 양이 적어서 보기엔 더 좋아보이는데 속도는 for문이 훨 빠름. 성능 우선이냐, 코드 간결성이냐 스타일 차이