알림
본 포스팅은 공부 목적으로 작성된 글이며 상업적 목적으로 절대 사용되지 않았음을 밝힙니다.
문제
https://programmers.co.kr/learn/courses/30/lessons/72410
카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로 가입하는 유저들이 카카오 아이디 규칙에 맞지 않는 아이디를 입력했을 때, 입력된 아이디와 유사하면서 규칙에 맞는 아이디를 추천해주는 프로그램을 개발하는 것입니다. 다음은 카카오 아이디의 규칙입니다.
1. 아이디의 길이는 3자 이상 15자 이하여야 합니다.
2. 아이디는 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.) 문자만 사용할 수 있습니다.
3. 단, 마침표(.)는 처음과 끝에 사용할 수 없으며 또한 연속으로 사용할 수 없습니다.
신규 유저가 입력한 아이디를 나타내는 new_id가 매개변수로 주어질 때, "네오"가 설계한 7단계의 처리 과정을 거친 후의 추천 아이디를 return 하도록 solution 함수를 완성해 주세요.
풀이
1단계: toLowerCase() 메서드를 사용해 문자열을 소문자로 변환합니다.(반대로 toUpperCase() 메서드는 문자열을 대문자로 변환)
2단계: replace() 메서드를 사용해 치환합니다. 정규표현식에 따라 a부터 z, 0부터 9, -, _, . 제외하고 전체를 공란으로 치환(제거)합니다.
3단계: replace() 메서드를 사용해 치환합니다. 마침표(.)가 두 개 이상(연속된)부터는 마침표(.) 한 개로 치환합니다.
4단계: 첫 번째에 마침표가 있거나(^\.|) 마지막에 있는지(\.$) 확인하고 이를 공란으로 치환(제거)합니다.
5단계: 만약(if) 빈 문자열이면 a로 치환합니다.
6단계: new_id의 길이가 16보다 크거나 같으면, 15까지 살리고 그 이후를 삭제하기 위해, .length로 길이를 파악해 16을 넘어가면 substring로 나머지를 제거해 줍니다. 여기서 substring은 substring(여기서부터, 여기까지) 잘라 반환하기 때문에 substring 안에 숫자 이후는 삭제할 수 있는 역할도 가능합니다.
7단계: 반복문을 통해, new_id가 2보다 작거나 같으면, new_id 마지막(charAt(answer.length -1)) 문자를 3이 될 때까지 더합니다.
코드
function solution(new_id) {
let answer = new_id;
answer = answer.toLowerCase(); // 1단계
answer = answer.replace(/[^a-z0-9-_.]/g, ''); // 2단계
answer = answer.replace(/\.+/g, '.'); // 3단계
answer = answer.replace(/^\.|\.$/g, ''); // 4단계
// 5단계
if (answer == '') { // 공백이면
answer += 'a' // a 더해주기(공백을 a로 치환)
}
// 6단계
if (answer.length >= 16) { // 16 초과하면
answer = answer.substring(0, 15); // 15까지 남기고 이하 제거
}
answer = answer.replace(/\.$/, '');
// 7단계
while (answer.length <= 2) { // 2 이하면
answer += answer.charAt(answer.length -1); // answer의 끝 문자를 더해주기
}
return answer;
}
노트
//g: g는 global의 약자로 // 안에 '전체'를 의미
[]: [] 안에 특수기호를 넣으면 개별적으로 변환
지금과 같은 상황에선 아마 a-z, 0-9를 a부터 z까지, 0부터 9까지 찾아야 하기 때문에 사용해야 합니다.
^: ^의 역할은 [] 안과 밖일 때 다른데, [] 안에 ^의 역할은 '제외'를 의미
\: 마침표(.)를 식별하기 위해 사용
+: '한 개 이상 포함'을 의미
^: [] 안이 아닌 [] 밖에서 사용하는데, 밖에서는 제외가 아닌, '첫 번째'를 의미
&: 마지막을 의미
|: 또는(or) 역할
'Algorithm > Programmers' 카테고리의 다른 글
[Programmers] 폰켓몬(JavaScript) (0) | 2022.03.20 |
---|---|
[Programmers] 모의고사(JavaScript) (0) | 2022.03.19 |
[Programmers] 없는 숫자 더하기(JavaScript) (0) | 2022.03.18 |
[Programmers] 완주하지 못한 선수(JavaScript) (0) | 2022.03.15 |
[Programmers] 숫자 문자열과 영단어(JavaScript) (0) | 2022.03.13 |
댓글