본문 바로가기
Algorithm

[Programmers] 2021 KAKAO BLIND RECRUITMENT - 신규 아이디 추천

by Jiseong 2021. 9. 24.

 

https://programmers.co.kr/learn/courses/30/lessons/72410

 

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

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

programmers.co.kr

 

 

 

[문제]

신규 유저가 입력한 아이디를 나타내는 new_id가 매개변수로 주어질 때, "네오"가 설계한 7단계의 처리 과정을 거친 후의 추천 아이디를 return 하도록 solution 함수를 완성해 주세요.

[제한사항]

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

 

 

 

 

//
//  main.swift
//  Programmers_신규아이디추천
//
//  Created by 임지성 on 2021/09/24.
//

import Foundation

func solution(_ new_id:String) -> String {
    // 1단계
    var my_id = new_id.lowercased()
    
    // 2단계
    var newID: String = ""
    for i in my_id {
        if i.isNumber || i.isLetter || i == "." || i == "-" || i == "_" {
            newID.append(i)
        }
    }
    
    // 3단계
    while newID.contains("..") {
        newID = newID.replacingOccurrences(of: "..", with: ".")
    }
    
    // 4단계
    while newID.hasPrefix(".") {
        newID.removeFirst()
    }
    
    while newID.hasSuffix(".") {
        newID.removeLast()
    }
    
    // 5단계
    if newID == "" {
        newID.append("a")
    }
    
    // 6단계
    if newID.count >= 16 {
        newID.removeSubrange(newID.index(newID.startIndex, offsetBy: 15)..<newID.endIndex)
    }
    
    if newID.hasSuffix(".") {
        newID.removeLast()
    }
    
    // 7단계
    while newID.count <= 2 {
        newID += String(newID.last!)
    }
    
    return newID
}

//print(solution("...!@BaT#*..y.abcdefghijklm"))

 

  • newID.replacingOccurrences(of: "..", with: ".") : ".."을 "."으로 변환
  • str.first / str.last : 첫번째 문자 / 마지막 문자
  • isLetter, isNumber
  • String 특정 index : str.index(str.startIndex, offsetBy: 숫자)
  • hasPrefix(".") : 앞 글자가 "."
  • hasSuffix(".") : 뒷 글자가 "."

댓글