프로그래머스 Lv.1 신규아이디 추천
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | function solution(new_id) { let answer = ''; let newId = new_id.toLowerCase(); // 1단계 let number = /[0-9]/; let str = /[a-z]/; // 2단계 for(let i = 0; i < newId.length; i++) { if(number.test(newId[i]) || str.test(newId[i]) || newId[i] === '-' || newId[i] === '_' || newId[i] === '.') { answer += newId[i]; } } answer = answer.split(''); // 3단계 for(let i = 0; i < answer.length-1; i++) { if(answer[i] === '.' && answer[i+1] === '.') { answer.splice(i, 1); i--; } } // 4단계 if(answer[0] === '.') answer.shift(); if(answer[answer.length-1] === '.') answer.pop(); // 5단계 if(answer.length === 0) { answer.push('a'); } // 6단계 if(answer.length >= 16) { if(answer[14] === '.') answer = answer.slice(0, 14); else answer = answer.slice(0, 15); } // 7단계 if(answer.length <= 2) { answer.push(answer[answer.length-1]); if(answer.length <= 2) answer.push(answer[answer.length-1]); } answer = answer.join(''); return answer; } | cs |
간단하게 단계별 설명
1단계 :
new_id
를 전부 소문자로 변환하여newID
에 할당한다.2단계 : 소문자 알파벳, 숫자, '-', '_', '.'를 제외하고 다 필터링 해준다. -> 알파벳과 숫자는 변수
number
와str
에 각각 정규식으로 만들어서 할당했다.3단계 : '.'이 연속으로 나왔을때 1개로 묶어줬다.
4단계 :
answer
의 맨 앞과 맨 뒤에 '.'이 있다면 없애준다.5단계 :
answer
이 비어있다면a
를 추가해준다.6단계 :
answer
이 15글자보다 길면 16글자 부터는 무시하고 15글자 까지만 유지한다. 만약 마지막 15번째 글자가 '.'라면 14번째 글자까지만 유지한다.7단계 :
answer
이 2글자보다 짧으면 마지막 글자를 뒤에 덧붙인다. 그래도 2글자보다 짧으면 한번 더 반복한다. -> 5단계에 의해서 최소 1글자가 있을 것이고, 최대 2번만 반복하면 되기 때문에 반복문 사용을 안하고if
문을 2번 사용해줬다.
1 2 3 4 5 6 7 8 9 10 11 12 13 | function solution(new_id) { const answer = new_id .toLowerCase() // 1 .replace(/[^\w-_.]/g, '') // 2 .replace(/\.+/g, '.') // 3 .replace(/^\.|\.$/g, '') // 4 .replace(/^$/, 'a') // 5 .slice(0, 15).replace(/\.$/, ''); // 6 const len = answer.length; return len > 2 ? answer : answer + answer.charAt(len - 1).repeat(3 - len); } | cs |
나름 이거 다 풀고 어려운걸 풀었다고 어깨가 들썩들썩 하고 있었다.
근데 다른 사람의 풀이를 보고 내 49줄이 13줄로 바뀌는 마법을 경험했다.
좋았던 마음은 싹 증발하고 그냥 현타가 와버렸다.
정규식을 6단계까지 사용하고 이걸 체이닝 할 생각은 어떻게 했을까 진짜...