https://programmers.co.kr/learn/courses/30/lessons/72410
function solution(new_id) {
var answer = '';
let temp = new_id;
// step1
temp = new_id.toLowerCase();
// console.log(temp);
// step2
let regex = /([\{\}\[\]\/?,;:|\)*~`!^\+<>@\#$%&\\\=\(\'\"])/g
temp = temp.replace(regex, '');
// console.log(temp);
// step3
let tArr = Array.from(temp);
for (var i = 0; i < tArr.length; i++) {
if (tArr[i] + tArr[i + 1] == "..") {
tArr.splice(i, 1);
i--;
}
}
// step4
for(var i = 0; i < tArr.length; i++){
if (tArr[0] == '.') tArr.shift()
}
for (var i = 0; i < tArr.length; i++) {
if (tArr[tArr.length - 1] == '.') tArr.pop();
}
// step6, step7
let len = tArr.length;
if (len == 0) {
tArr.push('a');tArr.push('a');tArr.push('a');
} else if (len == 1) {
tArr.push(tArr[0]); tArr.push(tArr[0]);
} else if (len == 2) {
tArr.push(tArr[1]);
}
else if (len > 15) {
tArr.splice(15);
for (var i = 0; i < tArr.length; i++) {
if (tArr[tArr.length - 1] == '.') tArr.pop();
}
};
console.log(tArr)
temp = tArr.join('');
console.log(temp, temp.length);
answer = temp;
return answer;
}
처음에 몰랏는데 전에 자바로 한번 시험쳤엇던 문제였다.
코드를 좀 간결하게 짜고싶었는데 그러다가 꼬이고, 시간이 오래걸려서 다지우고 단계별로 차근차근 풀어나갔다.
좀 해맨부분이 정규표현식이랑 . 부분이였는데, 정규표현식은 특수문자가 다적힌 구문을 찾아 거기서 . - _
3개를 지웠다. replace로 한번에 바꾸려다보니 위의 코드처럼 했는데 한글자씩 반복을 돌면서 a~z, 0~9, ,-_
의 indexOf를 찾아 있으면 넘기고, -1이면 그 글자를 지우는게 좀 더 정규표현식이 짧았을거 같다.
그 다음 처음과 끝의 .부분이 내가 한번만 unshift, pop해서 2,3,5,11,15 테케가 틀렸다고 나왔다.
그래서 unshift, pop있는 부분마다 글자를 다 돌면서 .이있으면 pop했다.
len >15보다 클 때는 pop만 했는데 앞부분은 unshift할 때 다잘라 냈고, 16자 넘어가면 뒷부분만 자르기 때문에 pop만 반복했다.
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])
}
다른 사람 풀이게시판에 있는 코드들 중에 되게 충격적인 코드였다.
정규표현식만으로 풀이해서 놀랍기도했는데 padEnd란걸 처음봤다.
padEnd는 끝 부분에 지정한 숫자가 될 때 까지 채워준다.
const str1 = 'Breaded Mushrooms';
console.log(str1.padEnd(25, '.'));
// expected output: "Breaded Mushrooms........"
위의 코드의 경우 str1이 25자가될때까지 .으로 채운다.
만약 글자를 따로 지정안하면 그냥 공백으로 채운다.