프로그래머스/코딩테스트
프로그래머스 문제 풀기 #신규 아이디 추천
선물공룡디보
2021. 11. 26. 13:19
문제 : https://programmers.co.kr/learn/courses/30/lessons/72410
내가 푼 정답 :
function solution(new_id) {
var answer = '';
//1단계 new_id의 모든 대문자를 대응되는 소문자로 치환합니다.
//2단계 new_id에서 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 모든 문자를 제거합니다.
//3단계 new_id에서 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환합니다.
//4단계 new_id에서 마침표(.)가 처음이나 끝에 위치한다면 제거합니다.
answer = new_id.toLowerCase()
.replace(/[\^\[\]]|[^A-z0-9\.\_\-]/g,"")
.replace(/\.{2,}/g,".")
.replace(/^\.+|\.+$/g,"");
if(answer.length < 1 ){
answer = 'a';
}
if ( answer.length >= 16){
answer = answer.slice(0, 15).replace(/\.+$/g,"");;
}
if( answer.length <= 2){
for(var i = 0 ; i < answer.length ; i ++){
answer += answer[answer.length-1];
if(answer.length == 3){
break;
}
}
}
return answer;
}
ID를 받았을때 단계별마다 필요한 정규식을 .replace 메서드를 메서드 체이닝으로 연결시켜 문자를 변경 시킵니다.
그 후 문자열의 크기 조건을 맞추어 값을 반환 하였습니다.
다른사람의 풀이 :
const solution = (new_id) => {
const id = new_id
.toLowerCase()
.replace(/[^\w\d-_.]/g, '')
.replace(/\.{2,}/g, '.')
.replace(/^\.|\.$/g, '')
.padEnd(1, 'a')
.slice(0, 15)
.replace(/^\.|\.$/g, '')
return id.padEnd(3, id[id.length-1])
}
나는 정규식을 a-zA-Z0-9 으로 사용 했는데, 이 풀이는 \w (문자열) \d (숫자) -_. /g 로 정규식을 사용하였다.
padEnd 메서드를 사용하여 문자열이 없을때 n-1 번째 인덱스에 'a' 문자열을 삽입하는 부분이 인상 깊었다.
또한 padEnd를 사용하여 문자열을 채우는 방법도 좋은 방법인듯 하다