Archive/Questions

[programmers/Swift] 신규 아이디 추천 (2021 Kakao Blind Recruitment)

Marco 2022. 5. 11. 00:54
728x90

programmers.co.kr - 코딩테스트연습 - Lv.1 - 2021 Kakao Blind Recruitment - 신규 아이디 추천

 

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

카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로

programmers.co.kr

Constraints :

  • new_id는 길이 1 이상 1,000 이하인 문자열입니다.
    new_id는 알파벳 대문자, 알파벳 소문자, 숫자, 특수문자로 구성되어 있습니다.
    new_id에 나타날 수 있는 특수문자는 -_.~!@#$%^&*()=+[{]}:?,<>/ 로 한정됩니다.

 

Solution.swift :

//
//  Created by Yongwoo Marco on 2022/05/06.
//  Copyright © 2022 Yongwoo Marco Kim. All rights reserved.
//

func solution(_ new_id:String) -> String {
    let phaseOne = new_id.map{ Character($0.lowercased()) }
    let phaseTwo = phaseOne.filter{ $0.isLetter || $0.isNumber || $0 == "-" || $0 == "_" || $0 == "." }
    let phaseThree = phaseTwo.map{ String($0) }.reduce(""){ first, added in
        if let last = first.last, last == ".", added == "." {
            return first
        } else {
            return first + added
        }
    }
    let phaseFour = phaseThree.trimmingCharacters(in: ["."])
    let phaseFive = phaseFour.isEmpty ? "a" : phaseFour
    let phaseSix = phaseFive.count > 15 ? ( Array(phaseFive)[14] == "." ? Array(phaseFive)[0..<14].map{ String($0) }.joined() : Array(phaseFive)[0..<15].map{ String($0) }.joined()  ) : phaseFive
    var phaseSeven = phaseSix
    while phaseSeven.count < 3 {
        phaseSeven.append(phaseSeven.last!)
    }
    return phaseSeven
}

print(solution("...!@BaT#*..y.abcdefghijklm")) // "bat.y.abcdefghi"
print(solution("z-+.^."))                      // "z--"
print(solution("=.="))                         // "aaa"
print(solution("123_.def"))                    // "123_.def"
print(solution("abcdefghijklmn.p"))            // "abcdefghijklmn"

How I tried this :
생각보다 단순하지만 문법적인 기능 체크를 많이 하는 문제였다.

 

What I got is :
replacingOccurrences()

trimmingcharacters()

// 배운 풀이 str: String
while str.contains("..") {
    newID = str.replacingOccurrences(of: "..", with: ".")
}

// 4단계 내 풀이 [Characters]()
arr = arr.map{ String($0) }.joined().trimmingCharacters(in: ["."]).map{ Character(extendedGraphemeClusterLiteral: $0) }
// 배운 풀이 str: String
if str.hasPrefix(".") {
    str.removeFirst()
}
if str.hasSuffix(".") {
    str.removeLast()
}

정말 배울게 한도 끝도 없다.

문제에 관한 모든 저작권 : https://programmers.co.kr/

728x90