본문 바로가기

프로그래머스 (Swift)/기초

[Day5-1] 코드 처리하기

문제

 

내 정답 코드

import Foundation

func solution(_ code:String) -> String {
    
    var ref = ""
    var mode = false
    var idx = 0
    
    for char in code {
        if !mode {
            if char == "1" {
                mode = true
            } else {
                if idx.isMultiple(of: 2) {
                    ref += String(char)
                }
            }
        } else {
            if char == "1" {
                mode = false
            } else {
                if !idx.isMultiple(of: 2) {
                    ref += String(char)
                }
            }
        }
        idx += 1
    }
    
    return ref == "" ? "EMPTY" : ref
}

 

#

1. 문자열을 순회하며 각 조건에 맞게 해결하였다.

 

아래 코드로 풀었다가 시간초과로 인한 여러 테스트 케이스를 통과하지 못하였다.

이유는 확실하지는 않지만 위 코드에서는 문자열을 순회하며 문자에 직접 접근하였고 아래 코드에서는 string.index를 통해 offset만큼 색인을 해야 하기 때문에 많은 시간이 걸렸을 것이라고 생각된다.

import Foundation

func solution(_ code:String) -> String {
    
    var ref = ""
    var mode = false
    
    for i in 0..<code.count {
        if !mode {
            if code[code.index(code.startIndex, offsetBy: i)] == "1" {
                mode = true
            } else {
                if i.isMultiple(of: 2) {
                    ref += String(code[code.index(code.startIndex, offsetBy: i)])
                }
            }
        } else {
            if code[code.index(code.startIndex, offsetBy: i)] == "1" {
                mode = false
            } else {
                if !i.isMultiple(of: 2) {
                    ref += String(code[code.index(code.startIndex, offsetBy: i)])
                }
            }
        }
    }
    return ref == "" ? "EMPTY" : ref
}

배운 기술