728x90
function solution(new_id) {
var answer = '';
/*아이디는 3자이상 15자 이하
알파벳 소문자 숫자 - _ . 만 사용가능 (.은 처음과 끝 사용불가, 연속사용 x)
특수문자는 -_.~!@#$%^&*()=+[{]}:?,<>/ 만 사용
*/
//1단계 소문자로 치환, 배열로 변환
let new_idLowercase = new_id.toLowerCase();
let arrayId = new_idLowercase.split("");
let arrayIdFinal = [];
//2단계 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 모든 문자를 제거
//사용하면 안되는 특수문자들
let cantuseSymbol = ["~","!","@","#","$","%","^","&","*","(",")","=","+","[","{","]","}",":","?",",","<",">","/"]
for(let i = 0; i<arrayId.length;i++){
let indexforSplice = cantuseSymbol.indexOf(arrayId[i])
//쓰면 안되는 특수문자를 제외한 나머지를 최종 배열에 추가
if(indexforSplice == -1){
arrayIdFinal.push(arrayId[i]);
}
//3단계 마침표(.)가 2번이상 연속된 부분을 하나의 마침표로 치환
for(let k = 0; k<arrayId.length; k++){
if(arrayIdFinal[k] =="." && arrayIdFinal[k+1]=="."){
arrayIdFinal.splice(k,1);
}
}
}
//4단계 마침표가 처음이나 끝에 위치하면 제거
if(arrayIdFinal[0]=="."){
arrayIdFinal.splice(0,1);
}
else if(arrayIdFinal[arrayIdFinal.length-1]=="."){
arrayIdFinal.splice(arrayIdFinal.length-1,1);
}
//5단계 빈문자열이라면 a대입
if(arrayIdFinal.length ==0){
arrayIdFinal.push("a");
}
else{
for(let h=0;h<arrayIdFinal.length;h++){
if(arrayIdFinal[h]==""){
arrayIdFinal[h]="a";
}
}
}
//6단계 16자 이상이면 15글자로 맞추기
if(arrayIdFinal.length >15){
arrayIdFinal.splice(15);
}
//15글자 맞춘후 마지막글자 .이면 제거
if(arrayIdFinal[arrayIdFinal.length-1]=="."){
arrayIdFinal.splice(arrayIdFinal.length-1,1);
}
//7단계 2자 이하라면 마지막 문자를 3자까지 맞추기
while(arrayIdFinal.length<3){
arrayIdFinal.push(arrayIdFinal[arrayIdFinal.length-1]);
}
//배열을 문자열로 바꾸기
answer = arrayIdFinal.join("");
console.log(answer)
return answer;
}
728x90
'개발 > 알고리즘' 카테고리의 다른 글
[프로그래머스 level 1 JS풀이] 내적 (0) | 2022.08.15 |
---|---|
[프로그래머스 level 1 JS풀이] 숫자 문자열과 영단어 (0) | 2022.08.15 |
[프로그래머스 level 1 JS] 음양 더하기 (0) | 2022.08.15 |
[프로그래머스 level 1 JS] 실패율 (0) | 2022.06.06 |
[프로그래머스 level 1 JS] 인형뽑기 (0) | 2022.06.06 |