내가 푼 정답
function solution(new_id) {
// 1단계
new_id = new_id.toLowerCase();
// 2단계
let new_id_temp = new_id;
var pattern1 = /[0-9]/; //숫자
var pattern2 = /[a-z]/; //영어
for (i = 0; i < new_id_temp.length; i++) {
if (
pattern1.test(new_id_temp[i]) |
pattern2.test(new_id_temp[i]) |
(new_id_temp[i] === "-") |
(new_id_temp[i] === "_") |
(new_id_temp[i] === ".")
) {
} else {
new_id = new_id.replace(new_id_temp[i], "");
}
}
// new_id = new_id.replace(/[^\w-_.]/g, "");
// 3단계
while (new_id.indexOf("..") !== -1) {
new_id = new_id.replace("..", ".");
}
// new_id = new_id.replace(/\.+/g, ".");
// 4단계
if (new_id[0] === ".") {
new_id = new_id.slice(1);
}
if (new_id[new_id.length - 1] === ".") {
new_id = new_id.slice(0, -1);
}
// 5단계, 6단계
if (new_id.length === 0) {
new_id = "a";
} else if (new_id.length >= 16) {
new_id = new_id.slice(0, 15);
if (new_id[new_id.length - 1] === ".") {
new_id = new_id.slice(0, -1);
}
}
// 7단계
while (new_id.length <= 2) {
new_id += new_id[new_id.length - 1];
}
return new_id;
}
let new_id = "z-+.^.";
console.log(solution(new_id));
2단계와 3단계의 경우 다른 분들이 푸신 걸 보며 정규식을 이용하여 한 줄로 간단히 풀 수 있다는 것을 알게 되었고, 해당 내용을 각 단계 아래쪽에 주석으로 써놓았다. 정규식을 처음부터 잘 알고 있었다면 훨씬 간단히 풀었을 것이고, 다른 단계의 내용들도 매우 간단해졌을 것이다.
'알고리즘' 카테고리의 다른 글
[알고리즘 문제] 하샤드 수 (1) | 2022.11.23 |
---|---|
[알고리즘 문제] 시저 암호 (0) | 2022.11.23 |
[알고리즘 문제] 소수 만들기 (0) | 2022.11.23 |
[알고리즘 문제] 문자열 내림차순으로 배치하기 (0) | 2022.11.23 |
[알고리즘 문제] 문자열 내 마음대로 정렬하기 (0) | 2022.11.23 |