[Level 1 / 문자열] 신규 아이디 추천 + Swift

sanghee·2021년 9월 6일
0

🙈코딩테스트

목록 보기
17/52
post-thumbnail

신규 아이디 추천

코딩테스트 연습 - 신규 아이디 추천

나의 풀이

주어진 아이디 문자열에 7단계로 처리를 하다 보니 코드 정리가 안되었는데, 함수별로 깔끔하게 정리되었다.

func solution(_ new_id:String) -> String {
    
    func step1(_ str: String) -> String {
        return str.lowercased()
    }
    
    func step2(_ str: String) -> String {
        let specialChars = ["-", "_", "."]
        return  str.filter({ $0.isLetter || $0.isNumber || specialChars.contains(String($0)) })
    }
    
    func step3(_ str: String) -> String {
        var newStr = str
        while newStr.contains("..") {
            newStr = newStr.replacingOccurrences(of: "..", with: ".")
        }
        return newStr
    }
    
    func step4(_ str: String) -> String {
        var newStr = str
        if newStr.first == "." { newStr.removeFirst() }
        if newStr.last == "." { newStr.removeLast()}
        return newStr
    }
    
    func step5(_ str: String) -> String {
        return str == "" ? "a" : str
    }
    
    func step6(_ str: String) -> String {
        var newStr = str
        if newStr.count >= 16 {
            newStr = String(newStr.prefix(15))
        }
        newStr = step4(newStr)
        return newStr
    }
    
    func step7(_ str: String) -> String {
        if str.count == 1 {
            return String(repeating: str, count: 3)
        }
        if str.count == 2 {
            return str + String(str.last!)
        }
        return str
    }
    
    var answer = new_id
    
    answer = step1(answer)
    answer = step2(answer)
    answer = step3(answer)
    answer = step4(answer)
    answer = step5(answer)
    answer = step6(answer)
    answer = step7(answer)
    
    return answer
}

참고사이트

profile
👩‍💻

0개의 댓글