안녕하세요 !
https://programmers.co.kr/learn/courses/30/lessons/72410
import Foundation
func solution(_ new_id:String) -> String {
// 1단계
var str = new_id.lowercased()
// 2단계
var chars = CharacterSet.lowercaseLetters
chars.formUnion(CharacterSet.decimalDigits)
chars.insert(charactersIn: "-_.")
let notAllowed = chars.inverted
str = str.components(separatedBy: notAllowed).joined()
// 3단계
while str.contains("..") {
str = str.replacingOccurrences(of: "..", with: ".")
}
// 4단계
str = str.trimmingCharacters(in: ["."])
// 5단계
if str.count == 0 {
str = "a"
}
// 6단계
if str.count >= 16 {
let start = str.startIndex
let end = str.index(str.startIndex, offsetBy: 15)
let range = start..<end
str = String(str[range])
str = str.trimmingCharacters(in: ["."])
}
// 7단계
if str.count <= 2 {
let endIndex = str.index(before: str.endIndex)
let add = String(str[endIndex])
while str.count != 3 {
str += add
}
}
return str
}
이 문제는 ... 7단계를 그대로 구현하면 되는 문제라 어렵지 않은 문제지만..
Swift로 풀려고하다보니 상당히... 신경써야 되는 부분이 많았습니다 ! 😅
저는 Swift의 CharacterSet
을 이용하여 허용되는 문자(알파벳 소문자, 숫자 , "-_.") chart set인 chars를 만든 다음 inverted
로 허용되지 않은 문자 셋(notAllowed)을 만들어 걸러주었습니다.
str.components(separatedBy: oks).joined()
그 다음 trimmingCharacters
으로 앞뒤 "."를 제거해주었습니다. trimmingCharacters은 양끝 문자를 제거해주는 메소드 입니다.