[프로그래머스] Lv.1 신규 아이디 추천

Miro·2022년 8월 8일
0
post-thumbnail

프로그래머스 Lv.1 신규아이디 추천

문제 설명

문제, 제한 사항

입출력

나의 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
function solution(new_id) {
    let answer = '';
    let newId = new_id.toLowerCase(); // 1단계
    let number = /[0-9]/;
    let str = /[a-z]/;
    
    // 2단계
    for(let i = 0; i < newId.length; i++) {
        if(number.test(newId[i]) || str.test(newId[i]) || newId[i] === '-' || newId[i] === '_' || newId[i] === '.') { 
            answer += newId[i];
        }
    }
    
    answer = answer.split('');
    
    // 3단계
    for(let i = 0; i < answer.length-1; i++) { 
        if(answer[i] === '.' && answer[i+1=== '.') { 
            answer.splice(i, 1);
            i--;
        }
    }
    
    // 4단계
    if(answer[0=== '.') answer.shift();
    if(answer[answer.length-1=== '.') answer.pop();
    
    // 5단계
    if(answer.length === 0) {
        answer.push('a');
    }
    
    // 6단계
    if(answer.length >= 16) {
        if(answer[14=== '.') answer = answer.slice(014);
        else answer = answer.slice(015);
    }
    
    // 7단계
    if(answer.length <= 2) {
        answer.push(answer[answer.length-1]);
        if(answer.length <= 2) answer.push(answer[answer.length-1]);
    }
    
    answer = answer.join('');
    
    
    return answer;
}
cs

간단하게 단계별 설명

1단계 : new_id를 전부 소문자로 변환하여 newID에 할당한다.

2단계 : 소문자 알파벳, 숫자, '-', '_', '.'를 제외하고 다 필터링 해준다. -> 알파벳과 숫자는 변수 numberstr에 각각 정규식으로 만들어서 할당했다.

3단계 : '.'이 연속으로 나왔을때 1개로 묶어줬다.

4단계 : answer의 맨 앞과 맨 뒤에 '.'이 있다면 없애준다.

5단계 : answer이 비어있다면 a를 추가해준다.

6단계 : answer이 15글자보다 길면 16글자 부터는 무시하고 15글자 까지만 유지한다. 만약 마지막 15번째 글자가 '.'라면 14번째 글자까지만 유지한다.

7단계 : answer이 2글자보다 짧으면 마지막 글자를 뒤에 덧붙인다. 그래도 2글자보다 짧으면 한번 더 반복한다. -> 5단계에 의해서 최소 1글자가 있을 것이고, 최대 2번만 반복하면 되기 때문에 반복문 사용을 안하고 if문을 2번 사용해줬다.

다른 사람의 풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
function solution(new_id) {
    const answer = new_id
        .toLowerCase() // 1
        .replace(/[^\w-_.]/g, ''// 2
        .replace(/\.+/g, '.'// 3
        .replace(/^\.|\.$/g, ''// 4
        .replace(/^$/'a'// 5
        .slice(015).replace(/\.$/''); // 6
 
    const len = answer.length;
 
    return len > 2 ? answer : answer + answer.charAt(len - 1).repeat(3 - len);
}
cs

나름 이거 다 풀고 어려운걸 풀었다고 어깨가 들썩들썩 하고 있었다.
근데 다른 사람의 풀이를 보고 내 49줄이 13줄로 바뀌는 마법을 경험했다.
좋았던 마음은 싹 증발하고 그냥 현타가 와버렸다.
정규식을 6단계까지 사용하고 이걸 체이닝 할 생각은 어떻게 했을까 진짜...

profile
프론트엔드 개발자(진)

0개의 댓글