MUKER_DEV with iOS

[swift] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ - μ‹ κ·œ 아이디 μΆ”μ²œ λ³Έλ¬Έ

πŸ€– μ•Œκ³ λ¦¬μ¦˜/programmers

[swift] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ - μ‹ κ·œ 아이디 μΆ”μ²œ

MUKER 2023. 1. 30. 21:24
 

ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€

μ½”λ“œ μ€‘μ‹¬μ˜ 개발자 μ±„μš©. μŠ€νƒ 기반의 ν¬μ§€μ…˜ 맀칭. ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€μ˜ 개발자 λ§žμΆ€ν˜• ν”„λ‘œν•„μ„ λ“±λ‘ν•˜κ³ , λ‚˜μ™€ 기술 ꢁ합이 잘 λ§žλŠ” 기업듀을 맀칭 λ°›μœΌμ„Έμš”.

programmers.co.kr

문제 ν‘ΈλŠ” 데 μžˆμ–΄ 도움이 λ˜λ„λ‘ λ‚˜μ˜ 풀이와 κ°œμ„ λœ 풀이λ₯Ό μ˜¬λ¦½λ‹ˆλ‹€.
λ˜ν•œ 풀이 ν›„ λ‹€λ₯Έ μ‚¬λžŒμ˜ 풀이λ₯Ό 보고 μ°Έκ³ ν• λ§Œν•œ 풀이도 μ˜¬λ¦½λ‹ˆλ‹€.

- λ¬Έμ œμ— 따라 λ‚˜μ˜ ν’€μ΄λ§Œ μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.
- ν•΄λ‹Ή 풀이듀은 풀이 쀑 ν•˜λ‚˜μΌ 뿐 μ΅œμ„ μ˜ ν’€μ΄λŠ” 아닐 수 μžˆμŠ΅λ‹ˆλ‹€.

 


 

 


 

λ‚˜μ˜ 풀이

import Foundation

func solution(_ new_id:String) -> String {
    var availableID = new_id
    var temp: Character = "0"
    availableID = availableID.lowercased() // 1
    for (i,j) in availableID.enumerated().reversed() {
        if !j.isLetter && !j.isNumber && j != "-" && j != "_" && j != "." { // 2
            availableID.remove(at: availableID.index(availableID.startIndex, offsetBy: i))
        }
    }
    for (i,j) in availableID.enumerated().reversed() {
        if j == "." && temp == "." { // 3
            availableID.remove(at: availableID.index(availableID.startIndex, offsetBy: i))
        }
        temp = j
    }
    if availableID.first == "." { availableID.removeFirst() } // 4
    if availableID.last == "." { availableID.removeLast() }
    if availableID.isEmpty { availableID = "a"} // 5
    if availableID.count > 15 { availableID.removeSubrange(availableID.index(availableID.startIndex, offsetBy: 15)...availableID.index(availableID.startIndex, offsetBy: availableID.count-1)) } // 6
    if availableID.last == "." { availableID.removeLast() }
    if availableID.count < 3 { availableID = availableID.padding(toLength: 3, withPad: String(availableID.last!), startingAt: 0)} // 7
    return availableID
}

 


 

κ°œμ„ λœ 풀이

import Foundation

func solution(_ new_id:String) -> String {
    var newId = new_id
        .lowercased()
        .replacingOccurrences(of: "[^a-z0-9-_.]", with: "", options: .regularExpression, range: nil)
        .replacingOccurrences(of: #"\.{1,}"#, with: ".", options: .regularExpression, range: nil)

    if newId.first == "." { newId.removeFirst() }
    if newId.last == "." { newId.removeLast() }
    if newId.isEmpty { newId.append("a")}
    if newId.count > 15 { newId.removeLast(newId.count - 15)}
    if newId.first == "." { newId.removeFirst() }
    if newId.last == "." { newId.removeLast() }
    while newId.count <= 2 {
        newId.append(newId.last!)
    }

    return newId
}

 


 

μ°Έκ³ ν• λ§Œν•œ 풀이

func solution(_ new_id:String) -> String {
    let newID = new_id
        .lowercased()
        .replacingOccurrences(of: #"[^\w.-]"#, with: "", options: .regularExpression)
        .replacingOccurrences(of: #"\.{2,}"#, with: ".", options: .regularExpression)
        .trimmingCharacters(in: CharacterSet(charactersIn: "."))
        .modifier { $0.isEmpty ? "a" : $0 }
        .modifier { $0.count >= 16 ?
            String($0[..<$0.index($0.startIndex, offsetBy: 15)]) : $0}
        .trimmingCharacters(in: CharacterSet(charactersIn: "."))
        .modifier {
            $0.count <= 2 ? $0.padding(toLength: 3, withPad: String($0.last!), startingAt: 0) : $0
        }

    return newID
}

extension String {
    func modifier(_ code: (String) -> String) -> String {
        return code(self)
    }
}