코딩 테스트/프로그래머스 level1
신규 아이디 추천
fullfish
2022. 4. 27. 02:00
아이디어
정규표현식을 쓰는것.
처음 코드
function solution(new_id) {
new_id = new_id
.toLowerCase()
.replace(/[^a-z0-9-_.]/g, "")
.replace(/\.\.+/g, ".")
.replace(/^\.|\.$/g, "");
if (new_id === "") new_id = "a";
if (new_id.length >= 16) new_id = new_id.slice(0, 15);
new_id = new_id.replace(/\.$/, "");
while (new_id.length < 3) {
new_id += new_id[new_id.length - 1];
}
return new_id;
}
더 좋은 코드
function solution(new_id) {
const answer = new_id // 같은 공간에 할당 안했음
.toLowerCase() // 1
.replace(/[^\w-_.]/g, '')
.replace(/\.+/g, '.') // 결과는 같지만 .하나도 서치함으로 속도면에서 안좋을듯
.replace(/^\.|\.$/g, '')
.replace(/^$/, 'a') // /^$/는 빈문자열 /^ $/는 ' '
.slice(0, 15).replace(/\.$/, ''); // slice(0, 15)하면 15보다 짧으면 거기까지 나옴
const len = answer.length;
return len > 2 ? answer : answer + answer.charAt(len - 1).repeat(3 - len);
//anser.charAt(len -1)이나 anser[len -1]이나 같음
//repeat()은 해당 숫자만큼 반복
}
padEnd 쓴 코드
const solution = (new_id) => {
const id = new_id
.toLowerCase()
.replace(/[^\w\d-_.]/g, '')
.replace(/\.{2,}/g, '.') /2회 이상 연속으로 반복되는 문자와 가능한 많이 일치
.replace(/^\.|\.$/g, '')
.padEnd(1, 'a')
.slice(0, 15)
.replace(/^\.|\.$/g, '')
return id.padEnd(3, id[id.length-1])
}