반응형
Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

undefined

[프로그래머스] 신규 아이디 추천 -JS 본문

Coding Test

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

JavaScripter 2022. 7. 1. 08:10
반응형

문제 설명


문제 풀이

function solution(new_id) {
    const lowCase = new_id.toLowerCase().split('')
    const arr = lowCase.filter(e=> /[0-9]/.test(e) || /[a-z]/.test(e) || e==='-' || e==='_' || e==='.') 
    const answer = []
    
    for(let i =0; i< arr.length; i++) {
        if(arr[i] ==='.' && arr[i+1]==='.'){
            continue
        }
        answer.push(arr[i])
    }

    if(answer.indexOf('.') === 0) {
        answer.shift()
    } else if(answer[answer.length-1]=== '.') {
        answer.pop()
    }

    if(answer.length === 0) {
       while(answer.length<3){
           answer.push('a')
       } 
       }else if ( answer.length >= 16) {
        answer.splice(15,answer.length-15)
    }
    
            if(answer[answer.length-1] === '.') {
        answer.pop()
            }
    
    if (answer.length <= 2) {
           while(answer.length<3) {
               answer.push(answer[answer.length-1])
           }
    } 
    return answer.join('')
}

1. new_id를 배열화

 

2. 정규표현식 이용하여 소문자와 숫자 정의 하고 들어가지 못하는 기호는 필터

 

3. 연속으로 나오는 ' . ' 나오는 경우 continue로 무시해주고 그 다음 것 하나만 넣어줌

 

4. .의 위치를 찾고 처음 나오는 경우에는 IndexOf 뒤에 나오는 경우에는 직접 마지막 순서를 지정해준다음에 . 제거 (indexOf는 처음 발견한 값을 리턴하므로 마지막의 .은 직접 순서를 지정해줘야함)

 

5. 빈배열의 경우 while을 이용하여 빈배열의 길이가 3이 될 때 까지 a를 넣어줌

 

6. 15자리까지 구현하기 위해 splice이용 Index기준 15번째 부터 15를 넘는 수 삭제 

 

7. 마지막에 .이붙는 경우 pop으로 빼줌

 

8. 배열의 길이가 2 이하인 경우에 길이가 3이 될때 까지 배열 마지막 수를 반복

 


배운 점

정규표현식 [a-z][0,9]...

[a-z].test(b) = true

반응형
Comments