[프로그래머스(LV1)] 신규 아이디 추천

문제설명

  1. new_id의 모든 대문자를 대응되는 소문자로 치환합니다.

  2. newid에서 알파벳 소문자, 숫자, 빼기(-), 밑줄(), 마침표(.)를 제외한 모든 문자를 제거합니다.

  3. new_id에서 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환합니다.

  4. new_id에서 마침표(.)가 처음이나 끝에 위치한다면 제거합니다.

  5. new_id가 빈 문자열이라면, new_id에 "a"를 대입합니다.

  6. new_id의 길이가 16자 이상이면, new_id의 첫 15개의 문자를 제외한 나머지 문자들을 모두 제거합니다.
    만약 제거 후 마침표(.)가 new_id의 끝에 위치한다면 끝에 위치한 마침표(.) 문자를 제거합니다.

  7. new_id의 길이가 2자 이하라면, new_id의 마지막 문자를 new_id의 길이가 3이 될 때까지 반복해서 끝에 붙입니다.

String이 들어왔을 때 위와 같은 조건으로 아래와 같이 새로운 아이디를 리턴해주어야한다.


내가 작성한 코드

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.isEmpty {
        newId.append("a")
    }
    while newId.count > 15 {
        newId.removeLast()
    }
    
    if newId.last == "." {
        newId.removeLast()
    }

    if newId.count == 1 {
        let lastItem: String = String(newId.last!)
        newId.append(lastItem)
        newId.append(lastItem)
    } else if newId.count == 2 {
        let lastItem: String = String(newId.last!)
        newId.append(lastItem)
    }
    return newId
}

이번 코드는 참고한 것이 되게 많았다.

isLetter, isNumber가 있는지도 몰랐다.이를 이용해 2단계까지 가볍게 진행하였다.

3단계에서도 검색을 통해 replacingOccurrences(of: , with: ) 라는 특정 문자열을 바꾸는 메서드를 알게되었다. 이를 이용해 ".."를 "."로 치환하였고 while을 이용하여 다 치환될때까지 반복하였다.

4단계에서도 검색을 통해 hasPrefix와 hasSuffix를 알게되었다. hasPrefix는 문자열의 앞과 비교하는 것이며, hasSuffix는 문자열의 뒤와 비교하는 것이다. 이를 이용해 마침표가 처음이나 끝에 위치할 때에 제거할 수 있도록 해주었다.

5단계에선 어렵지않게 isEmpty를 이용하여 비었는지 확인 후 비었을 경우엔 "a"를 추가하도록 하였다.

6단계는 while문을 이용하여 길이가 15가 넘는다면 뒷부분을 하나씩 지워주도록 하였다.

7단계는 길이가 1일때와 2일때를 나누어 최소 길이를 3으로 맞춰주었다.


이번 문제에서는 전체에 비하면 극히 일부분이겠지만 모르는 부분을 많이 배웠다. 기본적인 문법쪽을 확실하게 더 공부해야겠다.


신규 아이디 추천

좋은 웹페이지 즐겨찾기