[코딩테스트] 2021 kakao 블라인드 채용

채림·2022년 7월 1일
0

2021 KAKAO BLIND RECRUITMENT

신규 아이디 추천

2번에서 막혀서 결국 못 풀었다... 정규식만 알고 있으면 금방 십분만에도 풀릴 간단한 문제인데 정규식을 모르니 자주 사용하는 정규식을 활용해서 쓰려고 해도 외계어로 보이고..... 분명 배웠는데 이렇게 낯설수가! 결국 끝나고 찾아보니 그렇게 복잡한 정규식도 아니었다.... 허무.. 정규식 꼭 다시 공부해야겠다.

/*내가 생각했던 풀이
1. new_id.toLowerCase()
2. 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)=> ~!@#$%^&*()=+[{]}:?,안됨
3. new_id.replaceAll('..', '.')
4. new_id.endsWith(.[, length])    new_id.startsWith()
5. if (new_id === ''){new_id += a}
6. if (new_id.length>16) {new_id = new_id.slice(0,14)}
   if (new_id[14] === '.') {new_id = new_id.slice(0,13)}
7. if (new_id.length < 2_ 
d{new_id += new_id[new_id.length-1]}while(new.id_length<3)
*/

//모범답안
const solution = (new_id) => {
    const id = new_id
        .toLowerCase()
        .replace(/[^\w\d-_.]/g, '')
        .replace(/\.{2,}/g, '.')
        .replace(/^\.|\.$/g, '')
        .padEnd(1, 'a')
        .slice(0, 15)
        .replace(/^\.$/g, '')
    return id.padEnd(3, id[id.length-1])

모범답안 해석 및 참고할 점

  1. /[^a-z0-9\-\_\.]/ → 영소문자(a-z), 숫자(0-9), -. 중 어느 것 하나도 포함되지 않는([^ ]) 을 의미하는 정규식(/ /)
    (\w도 알바벳 대소문+숫자+
    (\w)를 의미해서 더 간단하게 쓸 수 있음, 그러나 모범답안은 왜 \d를 중복했지?

  1. \특수문자 → 정규식에서 특수문자를 쓸 때는 다른 기능이 아니라 특수문자 그 자체를 의미한다고 이스케이프() 해줘야 함 ⇒ _-.는 이스케이프 안 해서 안 되는데 -_.는 왜 되는지 모르겠다.

  2. /정규식/g → global flag, 전체 문자열을 탐색해서 모든 일치를 반환(안 쓰면 replace는 첫 번째 찾은 것만 교체)

  3. .replaceAll()은 최신 문법이라 사용 안되는 곳이 많으니 .replace()/정규식/g를 같이 쓰면 같은 효과(프로그래머스에서도 안된다!)

  4. 메서드 안에 정규식 넣을 때 ‘’로 묶어주기

  5. {2,} → 2개 이상 연속해서 일치

  6. endsWith()도 모든 js에서 지원하지는 않는다, 정규식 사용하는게 더 깔끔하고 안전!

  7. /^\.|\.$/ → .으로 시작(^.)하거나(|) .으로 끝나는(.$) 을 의미하는 정규식

  8. .padEnd(1, 'a') → 1글자 미만이라면 1글자가 될 때까지 a를 채워 넣는 메서드

  9. 15글자 이하거나 말거나 조건 따지지 않고 무조건 slice 해주면 if문 구구절절 쓰는 걸 줄일 수 있다

  10. 매번 new_id에 메서드 실행한 걸 다시 new.id에 대입하지 말고 계속 체이닝 해주면 훨씬 깔끔한 코드가 된다!

profile
나는 말하는 감자... 감자 나부랭이....

0개의 댓글