[알고리즘]신규 아이디 추천

chaewon Im·2022년 3월 28일
0

문제

카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로 가입하는 유저들이 카카오 아이디 규칙에 맞지 않는 아이디를 입력했을 때, 입력된 아이디와 유사하면서 규칙에 맞는 아이디를 추천해주는 프로그램을 개발하는 것입니다.
다음은 카카오 아이디의 규칙입니다.

  • 아이디의 길이는 3자 이상 15자 이하여야 합니다.
  • 아이디는 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.) 문자만 사용할 수 있습니다.
  • 단, 마침표(.)는 처음과 끝에 사용할 수 없으며 또한 연속으로 사용할 수 없습니다.

"네오"는 다음과 같이 7단계의 순차적인 처리 과정을 통해 신규 유저가 입력한 아이디가 카카오 아이디 규칙에 맞는 지 검사하고 규칙에 맞지 않은 경우 규칙에 맞는 새로운 아이디를 추천해 주려고 합니다. 신규 유저가 입력한 아이디가 new_id 라고 한다면,

[문제]
신규 유저가 입력한 아이디를 나타내는 new_id가 매개변수로 주어질 때, "네오"가 설계한 7단계의 처리 과정을 거친 후의 추천 아이디를 return 하도록 solution 함수를 완성해 주세요.

[제한사항]
newid는 길이 1 이상 1,000 이하인 문자열입니다.
new_id는 알파벳 대문자, 알파벳 소문자, 숫자, 특수문자로 구성되어 있습니다.
new_id에 나타날 수 있는 특수문자는 -
.~!@#$%^&*()=+[{]}:?,<>/ 로 한정됩니다.


풀이 해석

사용된 메소드 정리

  1. str.replace(pattern,교체값) : 어떤 패턴에 일치하는 부분을 두번째 인자로 교체한다. 패턴은 정규식 또는 문자열로 줄 수 있다.
  2. str.slice(start,end) : 문자를 start인덱스부터 end-1인덱스까지 자른 새로운 문자열을 만든다.
  3. str.charAt(index) : 해당 인덱스 위치에 있는 문자열을 반환
  4. str.repeat(count) : 문자열을 주어진 횟수만큼 반복해 붙힌 새로운 문자열을 반환

사용된 정규식 정리

\w : word, 문자
[^] : [ ] 내의 조건들을 부정(제외).
{m,n} : m회 이상,n회 이하 반복되는. n을 주지 않으면 m회 이상의 조건만 걸림.
| : or(또는)
^ : 문자열의 시작
$ : 문자열의 끝

function solution(new_id) {
    let answer = new_id
        .toLowerCase()
        .replace(/[^\w-_.]/g, '') //word(\w),-,_,.을 제외한(^) 모든(g)문자를 ''로 치환(=제거)
        .replace(/\.{2,}/g, '.')// .이 2개이상{2,}으로 연속되는 모든 문자를 '.'으로 치환
        .replace(/^\.|\.$/g,'')//마침표가 처음이나 끝에 있으면 제거, or == |
        .replace(/^$/,'a') //시작(^)과 끝($)만 존재하면 빈문자열, 'a'로 치환 
        .slice(0,15).replace(/\.$/,'') //slice로 16개를 자른다. 자른 문자의 마지막이 .이면(\.$) 없앤다. 
    
    const len = answer.length;
    return len > 2 ? answer : answer + answer.charAt(len - 1).repeat(3 - len); //answer가 이하라면 문자열 마지막에 위치한 문자를 charAt()으로 받아와, repeat()으로 주어진 횟수만큼 반복해 붙힌다.
}

[코드 출처]
https://velog.io/@leeeunbin/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%8B%A0%EA%B7%9C-%EC%95%84%EC%9D%B4%EB%94%94-%EC%B6%94%EC%B2%9C-JavaScript
[참고 자료]
https://curryyou.tistory.com/208

profile
빙글빙글 FE 개발자

0개의 댓글