<내 풀이> 못풀었다.
function solution(new_id) {
var answer = '';
var step1 = new_id.toLowerCase();
var step2 = step1.match(/\w\-\.\d\_/);
var step3 = step2.replace(/\..+/g,'.');
var step4 = step3.replace(/\.,'').replace(/.\s*$/,'');
var step5 = if(step4===''){
return 'a'
}else{
return step4;
}
var step6 = if(step5.length >= 16){
return step5.slice(0,15).replace(/.\s*$/,'');
}else{
return step5;
}
var step7 = if(step6.length <= 2) {
var last = step6.slice(-1);
while(step6.length==3){
step6 += last;
}
return step6
}else{
return step6
}
answer = step7
return answer;
}
<정답>
function solution(new_id) {
const answer = new_id
.toLowerCase()
.replace(/[^\w-_.]/g, '')
.replace(/\.{2,}/g, '.')
.replace(/^\.|\.$/g, '')
.replace(/^$/, 'a')
.slice(0, 15).replace(/\.$/, '');
const len = answer.length;
return len > 2 ? answer : answer + answer.charAt(len - 1).repeat(3 - len);
}
정규식 어렵다.
//아이디는 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.) 문자만 사용할 수 있습니다
replace(/[^\w-.]/g, '') // [] 조건연결, ^ ~가 아닌 것, \w 알파벳 숫자 언더스코어(_), / 패턴 연결, g 모두 선택
//마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환합니다.
replace(/\.{2,}/g, '.') // \.{2,} .이 2번 이상
//마침표(.)가 처음이나 끝에 위치한다면 제거합니다.
replace(/^\.|\.$/g, '') // ^\. .으로 시작, | 또는, \.$ 끝에 .이 온다
//빈 문자열이라면, new_id에 "a"를 대입합니다.
replace(/^$/, 'a') // ^$ 공백
//길이가 16자 이상이면, new_id의 첫 15개의 문자를 제외한 나머지 문자들을 모두 제거합니다.
//만약 제거 후 마침표(.)가 new_id의 끝에 위치한다면 끝에 위치한 마침표(.) 문자를 제거합니다.
slice(0, 15).replace(/\.$/, '');
'주5일알고리즘' 카테고리의 다른 글
Programmers: 크레인 인형뽑기 게임 with JS (2) | 2022.07.05 |
---|---|
Programmers: 키패드 누르기 with JS (2) | 2022.07.04 |
Programmers: 숫자 문자열과 영단어 with JS (1) | 2022.07.01 |
Programmers: 로또의 초고 순위와 최저 순위 with JS (0) | 2022.06.28 |
Programmers: 신고 결과 받기 with JS (2) | 2022.06.27 |