IT,Programming/프로그래머스_코딩테스트_javascript

프로그래머스 코딩테스트 JavaScript 풀이 _ 신규 아이디 추천

(범) 2022. 2. 16. 17:01

올바른 풀이

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

풀이 설명

 

1단계. 대문자를 소문자로 변환.

.toLowerCase() 

 

2단계. replace 메소드를 통해 괄호 내 좌측 내용을 괄호 우측 내용의 공란으로 모두 변환.

.replace(/[^\w-_.]/g, '')

-  [ ]안에 있는 ^은 NOT.

-  \w은 모든 문자(영어 소문자,숫자 포함).

-  -_.은 각 특수문자를 의미. 여러가지 문자를 나열하는데 굳이 쉼표로 나눌 필요 없음.

-  / /g는 '정규식(RegExp)'으로 매칭되는 모든 문자들을 선택함.

https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_regexp_g_string 

 

W3Schools online HTML editor

The W3Schools online code editor allows you to edit code and view the result in your browser

www.w3schools.com

 

 

3단계. replace 메소드를 통해 1개 이상의 마침표(.) 을 괄호 우측 하나의 마침표(.)로 모두 변환.

 .replace(/\.+/g, '.') // 3

- \. 은 input값 내에 존재하는 마침표(.) 을 의미. \를 붙히지 않을 경우 마침표(.)로 인식을 못 함.

- +는 1개 이상의 마침표(.) 을 의미

 

4단계. ^로 시작하거나 $로 끝나는 문자를 공란으로 변환.

.replace(/^\.|\.$/g, '')

- [ ]안에 위치하지 않는 ^은 Not이 아니라, '^뒤에 오는 문자로 시작하는' 이라는 의미.

- \. 은 마침표(.)를 의미.

- | 은 or의 의미.

- $ 은 '$ 앞에 오는 문자로 끝나는' 이라는 의미.

 

5단계. 빈 공간일 경우 a로 변환.

.replace(/^$/, 'a')

- /^$/ 는 빈 공간을 의미. 영어숙어처럼 외우자.

 

6단계. 문자열 0~15까지를 제외한 나머지 문자는 삭제. 거기다 마침표로 끝나면 마침표를 공란으로 변환.

.slice(0, 15).replace(/\.$/, '');

- slice(start,end)는 end 까지의 숫자까지만 선택하고 나머지를 삭제함.

 

7단계. 문자열의 길이를 len이라는 변수로 지정. 삼항연산자를 이용하여 문자열이 2개 이하일 경우 반복하여 3개 이상으로 만들기.

const len = answer.length;
    return len > 2 ? answer : answer + answer.charAt(len - 1).repeat(3 - len);

- 삼항연산자 형식: '조건' ? '조건이 맞다면 A' : '조건이 맞지 않다면 B'

- CharAt( ) 는 해당 위치의 문자 선택

- repeat( ) 는 ( )안의 숫자만큼 반복

- 즉, len의 길이가 2 초과(3 이상)이라면, return answer을 수행. 만약 그렇지 않다면(len의 길이가 2이하) answer + answer.CharAt(len -1).repeat(3-len) 실행.

 

여기서 문자열이 2이하일 경우는 "길이가 1개일 경우"와 "2개일 경우" 총 2가지이다. (문자열이 0개일 경우 5단계에서 'a'를 붙히기 때문에 최소 1개이다.) 따라서 먼저 문자열이 2개 이하인 answer의 마지막 문자를 선택하고, 그 다음에'길이가 1개일 경우' 마지막 문자 추가를 2번 반복/'2개일 경우'는 마지막 문자 추가를 1번 반복하여 더하여(+) 준다.