-
[프로그래머스] 신규 아이디 추천 - javascript기타/코딩테스트 2022. 6. 13. 22:30
문제
1단계 new_id의 모든 대문자를 대응되는 소문자로 치환합니다.
2단계 new_id에서 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 모든 문자를 제거합니다.
3단계 new_id에서 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환합니다.
4단계 new_id에서 마침표(.)가 처음이나 끝에 위치한다면 제거합니다.
5단계 new_id가 빈 문자열이라면, new_id에 "a"를 대입합니다.
6단계 new_id의 길이가 16자 이상이면, new_id의 첫 15개의 문자를 제외한 나머지 문자들을 모두 제거합니다.
만약 제거 후 마침표(.)가 new_id의 끝에 위치한다면 끝에 위치한 마침표(.) 문자를 제거합니다.
7단계 new_id의 길이가 2자 이하라면, new_id의 마지막 문자를 new_id의 길이가 3이 될 때까지 반복해서 끝에 붙입니다.내 풀이
function solution(_newId) { // 1 _newId = _newId.toLowerCase(); // 2 const regex = /[^a-z|0-9|\-|_|.]/gi; _newId = _newId.replace(regex, ''); // 3 const regexDox = /[.]{1,}/gi; _newId = _newId.replace(regexDox, '.'); // 4 if (_newId.startsWith('.')) _newId = _newId.substring(1, _newId.length); if (_newId.endsWith('.')) _newId = _newId.substring(0, _newId.length - 1); // 5 if (!_newId) _newId = 'a'; // 6 if (_newId.length > 15) _newId = _newId.substring(0, 15); if (_newId.endsWith('.')) _newId = _newId.substring(0, _newId.length - 1); // 7 while (_newId.length <= 2) _newId += _newId[_newId.length - 1]; return _newId; }
각 단계의 조건에 맞추어 문자열을 가공
이번 문제를 풀면서 startsWith와 endsWith라는 함수에 대해서 배우게 되었다.
문제를 푼 후 다른 사람들의 풀이를 보면서 마지막 7단계를 빼고는 chainning과 정규표현식으로 가능한 것을 알았다.
또한 6단계의 length라는 조건문을 추가해서 substring을 하지 않아도
slice로 0~15자까지 무조건 자르는 풀이를 보고.. 머리 탁! 했다. 넘치든 말든 결과는 똑같으니까..
마지막 7단계는 repeat이라는 함수로 반복할 수 있다는 것도 배움
실행테스트
const new_id = "...!@BaT#*..y.abcdefghijklm" console.log(solution(new_id)); // output => "bat.y.abcdefghi"
'기타 > 코딩테스트' 카테고리의 다른 글
[프로그래머스] 로또의 최고 순위와 최저 순위 - javascript (0) 2022.06.21 [프로그래머스] 키패드 누르기 - javascript (0) 2022.06.16 [프로그래머스] 숫자 문자열과 영단어 - javascript (0) 2022.06.14 [프로그래머스] 실패율 - javascript (0) 2022.06.13 [프로그래머스] 폰켓몬 - javascript (0) 2022.06.13