본문 바로가기
코딩테스트(알고리즘)

[프로그래머스] 신규 아이디 추천_Javascript

by Cafe Mocha 2022. 4. 28.

코딩테스트 연습 - 신규 아이디 추천 | 프로그래머스 (programmers.co.kr)

 

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

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

programmers.co.kr

 

나의풀이

function solution(new_id) {
    let answer = '';
    
    // input : string type

    //step1
    let step_1 = new_id.toLowerCase();
    let step_arr = [...step_1]

    //step2 정규식 사용
    let pattern_num = /[0-9]/;
    let pattern_eng = /[a-zA-Z]/;
    
    let step_2 = step_arr.filter(val=>{
        if(pattern_eng.test(val)||pattern_num.test(val)||val === '-'|| val === '_'|| val==='.') {
            return true
        } else {
            return false
        }
    })
    console.log(step_2)
    
    //step3 reduce활용
    //let step_3 = step_2.reduce((acc,cur)=>acc.includes(cur) ? acc : [...acc,cur],[])
    
    //step3 for
    let step_3=[];
    for(let i=0;i<step_2.length;i++){
        for(let j=1;j<step_2.length;j++){
            if(step_2[i]==='.'&&step_2[j]==='.'){
                
            } else {
                
            }
        }
    }
    console.log(step_3)
    
    return answer;
}

보는 것과 같이 지저분하고 step_3에서 막혔다.

해당 문제는 한시간 정도 풀이에 도전하다가 다른 풀이를 찾았다.

// 정규식을 활용하면 간단히 풀 수 있는 문제지만 정규식 알지 못하면 매우 어렵게 느껴졌다.

 


2. 다른 사람의 풀이

function solution(new_id) {
  let answer = new_id.toLowerCase()
    .replace(/[^a-z0-9-_.]/gi, '')
    .replace(/[.]{2,}/gi, '.')
    .replace(/^[.]|[.]$/gi,'');
  if(answer==='') answer = 'a';
  if(answer.length > 15){
    answer = answer.substring(0, 15);
    answer = answer.replace(/[.]$/gi,'');
  }
  while(answer.length < 3){
    answer += answer[answer.length-1];
  }
  return answer;
}

 

 


정규식에 대해 제대로 공부하고 블로그에 포스팅 할 예정이다.

공부할게 많다...