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#