본문 바로가기

개발/알고리즘

[프로그래머스] 2021 Kakao Blind Recruitment- 신규 아이디 추천

반응형
 

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

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

programmers.co.kr

 

입력 & 출력

문제는 링크에서 확인 바랍니다

풀이

문제에선 풀어나갈 방법을 순서대로 제시한다
3단계를 풀기 위해서 재귀를 사용했고 
4단계는 반복기에 함수로 만들었다

+
대문자를 소문자로 바꾸는 것은 string.lowercased() 이며 
소문자를 대문자로 바꾸는 것은 string.uppercased() 이다
문자열 안의 요소가 숫자인지 확인하는 방법은 s.isNumber 이며
문자열 안의 요소가 문자인지 확인하는 방법은 s.ASCII 와 s.isLetter 이다

 

Swift 전체 코드

import Foundation

func solution(_ new_id:String) -> String {
    var array = ""
    var i = 0
    var filtered = ""
    
    func checkPointPosition() {
        if filtered.first == "." {
            filtered.removeFirst()
        }
        if filtered.last == "." {
            filtered.removeLast()
        }
    }
    
    func checkMultiPoint(j: Int){
        let index = array.index(array.startIndex, offsetBy: j)
        if array[index] == "." {
            i += 1
            if j < array.count - 1{
                checkMultiPoint(j: j + 1)
            }
        }
    }
    
    for i in new_id {
        let a = i.lowercased()
        if a == "-" || a == "_" || a == "." || i.isNumber || i.isLetter {
            array.append(a)
        }
    }
    
    while i < array.count {
        let index = array.index(array.startIndex, offsetBy: i)
        filtered.append(array[index])
        
        if array[index] == "." && i + 1 < array.count {
            checkMultiPoint(j: i + 1)
        }
        i += 1
    }
    
    checkPointPosition()
   
    if filtered.count < 3 {
        if filtered.isEmpty {
            filtered.append("a")
        }
        let last = filtered.last!
        for _ in 0..<3 - filtered.count {
            filtered.append("\(last)")
        }
    }
    
    if filtered.count >= 16 {
        let range = filtered.index(filtered.startIndex, offsetBy: 15)
        filtered.removeSubrange(range...)
    }
    
    checkPointPosition()

    return filtered
}

 

반응형