PR - 신규 아이디 추천[실패]
문제
https://programmers.co.kr/learn/courses/30/lessons/72410
예시
no | new-id | result |
---|---|---|
예1 | "...!@BaT#*..y.abcdefghijklm" | "bat.y.abcdefghi" |
예1 | "z-+.^." | "z--" |
예1 | "=.=" | "aaa" |
예1 | "123_.def" | "123_.def" |
예1 | "abcdefghijklmn.p" | "abcdefghijklmn" |
풀이
- 주어진 문자열을 배열화한다음, 각 단계별로 처리한다.
- 1단계 : 정규표현식을 이용, 배열을 매핑하여 정규표현식에
match
되는 원소는 소문자로 변환한다. - 2단계 : 정규표현식을 이용, 배열을 필터링하여 정규표현식에
match
되는 원소만 걸러낸다. - 3단계 : 따로 변수를 선언하여
.
이 2개 이상 연속되는 경우 변수의 값을1
증가시킨다..
의 연속이 끝나는 경우 선언한 변수만큼 배열을splice
로 잘라낸다. - 4단계 :
shift
혹은pop
을 이용하여 배열의 양 끝이.
일 경우 배열의 양 끝을 자른다. - 5단계 : 배열의 길이가 0인 경우 배열에 'a' 를
push
한다. - 6단계 : 배열의 길이가 15보다 클 경우,
slice
로 배열을 잘라낸다. 이 때 배열의 맨 마지막 원소가.
이면 잘라낸다. - 7단계 : 배열의 길이가 2보다 작으면, 배열의 길이가 3이 될 때 까지 배열에 배열의 마지막원소를
push
로 계속 밀어 넣는다. - 배열을 다시
join
으로 문자화한다.
코드
function solution(new_id) {
let answer = "";
let arr = Array.from(new_id);
// 1단계
let regex = /[A-Z]/
arr = arr.map((el) => {
if (el.match(regex)) return el.toLowerCase();
else return el;
})
// 2단계
regex = /[a-z]|[0-9]|[-_.]/
arr = arr.filter((el) => {
return (el.match(regex))
})
// 3단계
let dotSequence = 0;
arr.forEach((el, idx, ar) => {
if (el === '.' && el === ar[idx + 1]) dotSequence++;
else {
ar.splice(idx - dotSequence, dotSequence);
dotSequence = 0;
}
});
// 4단계
if(arr[0] === '.') arr.shift();
if(arr[arr.length-1] === '.') arr.pop();
// 5단계
if(arr.length === 0) arr.push('a');
// 6단계
if(arr.length > 15) arr = arr.slice(0,15);
if(arr[arr.length-1] === '.') arr.pop();
// 7단계
if(arr.length <= 2) {
while(arr.length !== 3) {
arr.push(arr[arr.length-1]);
}
}
answer = arr.join("");
return answer;
}
Author And Source
이 문제에 관하여(PR - 신규 아이디 추천[실패]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@goody/PR-신규-아이디-추천실패저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)