function solution(new_id) {
new_id = new_id.toLowerCase();
new_id = new_id.match(/[a-z\d-_.]/g);
for(let i = 0; i < new_id.length; i++){
if(new_id[i] === '.' && new_id[i] === new_id[i+1]){
new_id[i] = '';
}
}
new_id = new_id.join('');
if(new_id[0] === '.'){
new_id = new_id.slice(1);
}
if(new_id[new_id.length-1] === '.'){
new_id = new_id.slice(0, -1);
}
if(new_id === ''){
new_id = 'a';
}
if(new_id.length > 15){
new_id = new_id.slice(0, 15);
if(new_id[new_id.length-1]==='.'){
new_id = new_id.slice(0, 14);
}
}
while(new_id.length < 3){
new_id = new_id + new_id[new_id.length-1];
}
return new_id
}
function solution(new_id){
let id = new_id
.toLowerCase()
.replace(/[^\w-.]/g, '')
.replace(/\.+/g, '.')
.replace(/^\.|\.$/, '')
.replace(/^$/, 'a')
.slice(0, 15)
.replace(/^\.|\.$/, '');
return id.length > 3 ? id : id + id[id.length-1].repeat(3-id.length)
}
첫번째는 주어진 것을 순서에 따라 if문으로 바꾸어 나간 것이다.
정규 표현식을 쓸 수 있을 것 같은데 영 감이 안잡혀서 이렇게 하고 통과한 후 다른 분 코드를 봤더니 이렇게 멋지게 정규표현식을 쓰는 것이다.
String의 프로토 타입 메소드인 replace를 체이닝해서 사용하는걸 보고, 나도 이걸보면서 더듬더듬 집어나갔다.
5번째의 빈문자열을 정규표현식으로 표현을 못해서 한참 헤매다 다시 코드보니까 와우 놀라웠다.
시작점을 나타내는 ^와 끝을 나타내는 특수문자$ 사이에 아무것도 없으니 빈 문자열!
역시 고수들의 코드는 항상 놀라운 듯 하다.
출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges#