Daeng iOS

[프로그래머스 코테 기초 Swift] #5-1 코드 처리하기 본문

알고리즘 & 코딩테스트/프로프래머스

[프로그래머스 코테 기초 Swift] #5-1 코드 처리하기

U_Daeng 2024. 9. 16. 17:44

프로그래머스 코딩 기초 트레이닝의 Day5는 "조건문"에 관한 문제다

 

🗒️ 문제


✏️ 내 풀이 

func solution(_ code:String) -> String {
    var ret = ""
    var mode = 0
    let arr = Array(code)
    for i in 0..<code.count {
        if(mode == 0) {
            if(arr[i] != "1" && i % 2 == 0) {
                ret += String(arr[i])
            }else if(arr[i] == "1"){
                mode = 1
            }
        } else if(mode == 1) {
            if(arr[i] != "1" && i % 2 == 1) {
                ret += String(arr[i])
            }else if(arr[i] == "1"){
            mode = 0
            }
        }
    }
    return ret == "" ? "EMPTY" : ret
}

 

꾸역꾸역 풀어냈음

1) 먼저 String 인 code를 배열로 변환해서 그 수만큼 반복문을 돌린다

2) 반복문안에서 mode 변수를 구분한다

3) mode를 구분하는 조건문 안에서 1인지 아닌지 분기하여 처리한다 

대충 이런식으로 풀었는데.. 전혀 깔끔한 느낌이 들지않았음

 

🔍 다른 풀이

1) 
func solution(_ code:String) -> String {
    var answer = "", mode = false
    code.enumerated().forEach {
        let code = String($0.element)
        if code == "1" { mode.toggle() }
        else {
            if mode && $0.offset % 2 != 0 { answer.write(code) }
            else if !mode && $0.offset % 2 == 0 { answer.write(code) } 
        }
    }
    return answer.isEmpty ? "EMPTY" : answer
}

2)
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
}

 

일단 첫번째 코드에서 아차 싶었던 것..

- mode는 그냥 0과 1을 구분하여 스위치 하기 위함이기 때문에 Bool 타입으로 구현해서 toggle()해도 됐다

 

enumerated()는 공부를 따로 해봐야할 것 같다 ..! 

아직은 넘 어렵군