프로그래머스 신규아이디추천

hankyulee·2021년 11월 1일
0

Swift coding test 준비

목록 보기
33/57
import Foundation

func solution(_ new_id:String) -> String {
    var tmp = new_id.lowercased()
    var restrict = "~!@#$%^&*()=+[{]}:?,<>/"
    var new = tmp.filter{
        if restrict.contains($0){
            return false
        }
        else {return true}
    }
    
    // print("fds")
    // print(new)
    var result = new
    var zeroBool = false
    var count = 0
    var jjumArray = [Int]()
    result.enumerated().forEach{
        if $0.element == Character(".") {
            count += 1
        }
        else { count = 0}
        if count >= 2 {
            jjumArray.append($0.offset)
        }
    }
    //print(jjumArray)
    var arrayTmp = Array(result)
    for i in jjumArray{
        arrayTmp[i] = Character(" ")
        
    }
    //arrayTmp = arrayTmp.map{Character($0)}
    //var arrChar = Array<Character>()
    arrayTmp.removeAll{$0 == " "}
    // print("sd")
    // print(arrayTmp)
    
    if arrayTmp.count >= 1 {
        if arrayTmp.first! == "." {arrayTmp.removeFirst()}
    }
    if arrayTmp.count >= 1 {
        if arrayTmp.last! == "." {arrayTmp.removeLast()}
    }
    
    
    if arrayTmp.count == 0 {arrayTmp.append("a")}
    
    if arrayTmp.count >= 16 {
        arrayTmp = Array(arrayTmp[0..<15])
        
    }
    if arrayTmp.last! == "." {arrayTmp.removeLast()}
    if arrayTmp.count <= 2 {
        //let lastVal = arrayTmp.last!
        arrayTmp.append(arrayTmp.last!)
    }
    if arrayTmp.count <= 2 {
        //let lastVal = arrayTmp.last!
        arrayTmp.append(arrayTmp.last!)
    }
    // print(String(arrayTmp))
    //print(arrayTmp.first,arrayTmp.last)
    return String(arrayTmp)
}

깨달은것: remove할 때는 array또는 string의 개수가 0 이아닌지 확인해야한다. array[0..<15]의 타입은 sliceArray이다. 따라서 array로 고쳐야했다..

  • 이런 함수도 있다.

  • 바뀔때까지 계속 바꾼다.

string함수: hasPrefix,hasSuffix -> 어레이 함수의 last!보다 안전하다.

  • 스트링의 인덱스는 복잡하다. 위의 함수는 자주 보이는 함수다.

0개의 댓글