[iOS / Swift] 코드 처리하기

justdotheg·2024년 2월 20일

문제

내 풀이

import Foundation

func solution(_ code:String) -> String {
    
    var codeArr = code.map {String($0)}
    var mode  = 0
    var answer: String = ""
    
    for i in 0 ... code.count-1 {
        if mode == 0 {
            if codeArr[i] == "1" {
                mode = 1
            }else{
                (i % 2 == 0) ? (answer += codeArr[i]) : (answer += "")
            }    
        }else{
             if codeArr[i] == "1" {
                mode = 0
            }else{
                (i % 2 == 1) ? (answer += codeArr[i]) : (answer += "")
            }          
        } 
    } 
    
    return answer == "" ? "EMPTY" : answer 
}

최적화 풀이

func solution(_ code: String) -> String {
    let result = code.enumerated().reduce(into: ("", 0)) { acc, val in
        let (i, c) = val

        if c == "1" {
            acc.1 = 1 - acc.1
        } else if (acc.1 == i % 2) {
            acc.0 += String(c)
        }
    }
    return result.0.isEmpty ? "EMPTY" : result.0
}

요약

  • Swift의 문자열은 다른 언어 처럼 배열의 요소에 접근하듯이 'str[i]' 방식의 문법을 사용하면 에러가 발생한다.
  • str[str.index(str.startIndex, offsetBy: 원하는 인덱스] 방식으로 접근해야 한다.
  • 하지만 복잡하므로 'String'을 'String Array'나 'Array'로 변환하여 다른 언어처럼 편하게 str[i] 접근하자.

A. Swift의 String의 index 펑션으로 문자열 요소에 접근한 경우

let str = "ABCDE"
str[str.index(str.startIndex, offsetBy: 2] // C

B. String을 String Array로 변환하여 문자열 요소에 쉽게 접근한 경우

let str = "ABCDE"
let strArray = str.map{String($0)}
strArray[2]  // C

C. Array로 Type 변환하여 문자열 요소에 쉽게 접근한 경우

let str = "ABCDE"
let strArray = Array(str)
strArray[2]  // C

결론!!

Swift에서 문자열의 요소에 접근할 때는 Array() 형변환 방법인 C가 제일 편한 것 같다.
단, Array() 형변환시 배열의 요소 하나하나는 String형이 아닌 Character형이므로 필요시 String() 형변환이 필요하다!

0개의 댓글