[회고] 신입 iOS 개발자가 되기까지 feat. 카카오 자세히보기

💻 CS/알고리즘 연습

[알고리즘 연습] 신규 아이디 추천 (프로그래머스 lv1, 스위프트)

inu 2022. 1. 22. 13:00
반응형

문제

https://programmers.co.kr/learn/courses/30/lessons/72410?language=swift

 

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

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

programmers.co.kr

풀이

import Foundation

func solution(_ new_id:String) -> String {
    var myID: String = new_id

    myID = myID.lowercased()

    var newID: String = ""
    for i in myID {
        if i.isLetter || i.isNumber || i == "-" || i == "_" || i == "." {
            newID.append(i)
        }
    }

    while newID.contains("..") {
        newID = newID.replacingOccurrences(of: "..", with: ".")
    }

    while newID.hasPrefix(".") {
        newID.removeFirst()
    }

    while newID.hasSuffix(".") {
        newID.removeLast()
    }

    if newID == "" {
        newID = "a"
    }

    if newID.count >= 16 {
        let index = newID.index(newID.startIndex, offsetBy: 15)
        newID = String(newID[newID.startIndex..<index])
        if newID.hasSuffix(".") {
            newID.removeLast()
        }
    }

    if newID.count <= 2 {
        while newID.count != 3 {
            newID = newID + String(newID.last!)
        }
    }

    return newID
}
  • isLetter, isNumber : Char의 문자, 숫자여부 확인가능 (반환값 Bool)
  • replacingOccurrences : of 부분을 with으로 변경 (반환값 String)
  • newID.index : String의 index를 반환한다.
  • 파이썬으로 풀었을 때는 막힘없이 금방 풀었는데, Swift로 해결하려니 문법을 몰라서 오래걸렸다...
  • 일단 문자열처리하는 방법에 익숙해질 필요가 있겠다.
반응형