Algorithm

[Programmers] LV1: 카카오 신규아이디 추천 (JavaScript)

반응형

문제

// 너무 코드가 길고 작성하는데 시간이 많이 걸렸다... 거의 1시간
// 대부분 2시간 ~ 3시간안에 적어도 3문제 이상을 해결해야하는데 이렇게 코드를 작성하다가는
// 시간안에 다른 문제를 풀지 못할 것 같다..

// 다른 알고리즘 고수분들은 어떻게 풀었을지.. 다른 사람의 풀이와 검색을 통해 확인을 해봐야겠다!!

// 무슨 7줄에 해결을... 이래서 정규표현식 정규표현식 하는건가 ㅠ.ㅠ
// 문자를 다루는 문제를 해결할 떄는 정규표현식을 활용해서 푸는 연습을 해보아야겠다.




function solution(new_id) {
    const maxLength = 15;
    const minLength = 3;

    let recommendationID = replaceUppercaseToLowercase(new_id);
    recommendationID = deleteUnallowedString(recommendationID);
    recommendationID = changeNextToPeriod(recommendationID)
    recommendationID = deleteFirstAndEndPeriod(recommendationID)
    recommendationID = replaceStringtoMaxLength(recommendationID).join('')
    return checkEmptyString(recommendationID)
    // lv.1
    function replaceUppercaseToLowercase(text) {
        return text.toLowerCase()
    }

    // lv.2 정규표현식 쓰니깐 개편하네.....
    function deleteUnallowedString(text) {
        const resultText = text.split('').filter(string => {
            const customRegExp = /[a-z0-9._-]/;
            if(customRegExp.test(string)) {
                return string
            }
        })     
        return resultText
    }

    // lv. 3
    function changeNextToPeriod(text) {
        const stack = [];
        for(let string of text) {
            if(string === '.') {
                if(stack[stack.length - 1] === '.') {
                    continue
                }
            }
            stack.push(string)
        }
        return stack
    }
    // lv.4 , lv.6-2
    function deleteFirstAndEndPeriod(text) {
        if(text[0] == '.') text.shift()
        if(text[text.length - 1] === '.') text.pop()
        return text 
    }
    // lv. 5
    function checkEmptyString(string) {
        if(string === '') string = 'a'
        if(string.length < minLength) {
            for(let i = string.length; i < minLength; i++) {
                string += string[string.length - 1]
            }
        }
        return string
    }
        // lv.6
    function replaceStringtoMaxLength(string) {
        if(string.length >= maxLength) {
            string.splice(maxLength, string.length - maxLength)
            return deleteFirstAndEndPeriod(string)
        }
        return string

    }
}
반응형