올바른 풀이
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
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번 반복하여 더하여(+) 준다.
'IT,Programming > 프로그래머스_코딩테스트_javascript' 카테고리의 다른 글
프로그래머스 코딩테스트 JavaScript 풀이 _수박수박수박수박수박수? (0) | 2022.02.17 |
---|---|
프로그래머스 코딩테스트 JavaScript 풀이 _완주하지 못한 선수 (0) | 2022.02.17 |
프로그래머스 코딩테스트 JavaScript 풀이 _두 정수 사이의 합 (0) | 2022.02.16 |
프로그래머스 코딩테스트 JavaScript 풀이 _ 문자열을 정수로 바꾸기 (0) | 2022.02.16 |
프로그래머스 코딩테스트 JavaScript 풀이 _ 문자열을 정수로 바꾸기 (0) | 2022.02.16 |