undefined
[프로그래머스] 신규 아이디 추천 -JS 본문
반응형
문제 설명
문제 풀이
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
반응형
'Coding Test' 카테고리의 다른 글
[프로그래머스] 신고 결과 받기 -JS (0) | 2022.07.02 |
---|---|
[프로그래머스] 로또의 최고 순위와 최저 순위 -JS (0) | 2022.07.01 |
[프로그래머스] 크레인 인형뽑기 -JS (0) | 2022.06.30 |
[프로그래머스] 소수 만들기 -자바스크립트(JS) (0) | 2022.06.28 |
[프로그래머스] 비밀지도 -JS (0) | 2022.06.27 |
Comments