[JavaScript][Programmers] 신규아이디추천

조준형·2021년 7월 13일
0

Algorithm

목록 보기
29/142
post-thumbnail

🔎 신규 아이디 추천

❓ 문제링크

https://programmers.co.kr/learn/courses/30/lessons/72410

📄 제출 코드

function solution(new_id) {
    var answer = '';
    let temp = new_id;
    // step1
    temp = new_id.toLowerCase();
    // console.log(temp);
    // step2
    let regex = /([\{\}\[\]\/?,;:|\)*~`!^\+<>@\#$%&\\\=\(\'\"])/g
    temp = temp.replace(regex, '');
    // console.log(temp);
    
    // step3
    let tArr = Array.from(temp);
    for (var i = 0; i < tArr.length; i++) {
        if (tArr[i] + tArr[i + 1] == "..") {
            tArr.splice(i, 1);
            i--;
        }
    }

    // step4
    for(var i = 0; i < tArr.length; i++){
    if (tArr[0] == '.') tArr.shift()
    }
    for (var i = 0; i < tArr.length; i++) {
            if (tArr[tArr.length - 1] == '.') tArr.pop();
        }

    // step6, step7
    let len = tArr.length;
    if (len == 0) {
        tArr.push('a');tArr.push('a');tArr.push('a');
    } else if (len == 1) {
        tArr.push(tArr[0]); tArr.push(tArr[0]);
    } else if (len == 2) {
        tArr.push(tArr[1]);
    }
    else if (len > 15) {
        tArr.splice(15);
        for (var i = 0; i < tArr.length; i++) {
            if (tArr[tArr.length - 1] == '.') tArr.pop();
        }
    };
   console.log(tArr)
    temp = tArr.join('');    
    console.log(temp, temp.length);

    answer = temp;
    return answer;
}

처음에 몰랏는데 전에 자바로 한번 시험쳤엇던 문제였다.
코드를 좀 간결하게 짜고싶었는데 그러다가 꼬이고, 시간이 오래걸려서 다지우고 단계별로 차근차근 풀어나갔다.
좀 해맨부분이 정규표현식이랑 . 부분이였는데, 정규표현식은 특수문자가 다적힌 구문을 찾아 거기서 . - _ 3개를 지웠다. replace로 한번에 바꾸려다보니 위의 코드처럼 했는데 한글자씩 반복을 돌면서 a~z, 0~9, ,-_의 indexOf를 찾아 있으면 넘기고, -1이면 그 글자를 지우는게 좀 더 정규표현식이 짧았을거 같다.
그 다음 처음과 끝의 .부분이 내가 한번만 unshift, pop해서 2,3,5,11,15 테케가 틀렸다고 나왔다.
그래서 unshift, pop있는 부분마다 글자를 다 돌면서 .이있으면 pop했다.

len >15보다 클 때는 pop만 했는데 앞부분은 unshift할 때 다잘라 냈고, 16자 넘어가면 뒷부분만 자르기 때문에 pop만 반복했다.

📄 다른 코드

const solution = (new_id) => {
    const id = new_id
        .toLowerCase()
        .replace(/[^\w\d-_.]/g, '')
        .replace(/\.{2,}/g, '.')
        .replace(/^\.|\.$/g, '')
        .padEnd(1, 'a')
        .slice(0, 15)
        .replace(/^\.|\.$/g, '')        
    return id.padEnd(3, id[id.length-1])
}

다른 사람 풀이게시판에 있는 코드들 중에 되게 충격적인 코드였다.
정규표현식만으로 풀이해서 놀랍기도했는데 padEnd란걸 처음봤다.
padEnd는 끝 부분에 지정한 숫자가 될 때 까지 채워준다.

const str1 = 'Breaded Mushrooms';

console.log(str1.padEnd(25, '.'));
// expected output: "Breaded Mushrooms........"

위의 코드의 경우 str1이 25자가될때까지 .으로 채운다.
만약 글자를 따로 지정안하면 그냥 공백으로 채운다.

profile
깃허브 : github.com/JuneHyung

0개의 댓글