[프로그래머스 level 1 JS] 신규 아이디 추천

2022. 6. 6. 14:26·개발/알고리즘
728x90
반응형
 

코딩테스트 연습 - 신규 아이디 추천

카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로

programmers.co.kr

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
'개발/알고리즘' 카테고리의 다른 글
  • [프로그래머스 level 1 JS풀이] 숫자 문자열과 영단어
  • [프로그래머스 level 1 JS] 음양 더하기
  • [프로그래머스 level 1 JS] 실패율
  • [프로그래머스 level 1 JS] 인형뽑기
TeTedo.
TeTedo.
  • TeTedo.
    TeTedo 개발 일기
    TeTedo.
  • 전체
    오늘
    어제
    • 분류 전체보기 (319)
      • 개발 (274)
        • Article (4)
        • 정리 (21)
        • Spring Boot (17)
        • JPA (2)
        • JAVA (6)
        • Database (4)
        • 자료구조 (11)
        • 알고리즘 (32)
        • React (20)
        • Docker (10)
        • node.js (18)
        • Devops (11)
        • Linux (4)
        • TypeScript (3)
        • Go (10)
        • HyperLedger (4)
        • BlockChain (43)
        • html, css, js (48)
        • CS (3)
        • AWS (3)
      • 모아두고 나중에 쓰기 (3)
      • 팀프로젝트 (18)
        • SNS(키보드워리어) (9)
        • close_sea (9)
      • 개인프로젝트 (1)
        • Around Flavor (1)
        • CHAM (13)
        • ethFruitShop (5)
      • 독서 (0)
        • 스프링부트와 AWS로 혼자 구현하는 웹 서비스 (0)
  • 블로그 메뉴

    • 홈
    • 개발일기
    • CS
    • 실습
    • 코딩테스트
    • 웹
    • Go
    • node.js
    • 팀플
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    mysql
    React
    컨테이너
    node
    nodejs
    html
    하이퍼레저
    CSS
    js
    블록체인
    erc20
    명령어
    node.js
    도커
    go
    프로그래머스
    ERC721
    go언어
    30일챌린지
    30일 챌린지
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
TeTedo.
[프로그래머스 level 1 JS] 신규 아이디 추천
상단으로

티스토리툴바