로또의 최고 순위와 최저 순위 문제 확인 👉 https://programmers.co.kr/learn/courses/30/lessons/72410
나의 풀이
function solution(new_id) {
// 1단계
new_id = new_id.toLowerCase();
// 2단계
new_id = new_id.replace(/[^\w\.\-]/g, '');
// 3단계
new_id = new_id.replace(/[\.]{2,}/g, '.');
// 4단계
new_id = new_id.replace(/^\./, '');
// 4단계
new_id = new_id.replace(/\.$/, '');
// 5단계
if (!new_id) {
new_id = 'a';
}
// 6단계
if (new_id.length >= 16) {
new_id = new_id.slice(0, 15);
new_id = new_id.replace(/\.$/, '');
}
// 단계
if (new_id.length <= 2) {
new_id = new_id.padEnd(3, new_id.split('').reverse().join(''));
}
return new_id;
}
문제를 보고, 1-7 단계를 하나씩 해결하자고 생각하였다.
1단계 소문자로 치환 : toLowerCase()
2단계 특정 문자 제거 : replace()
3단계 특정 문자 치환 : replace()
4단계 특정 문자 제거 : replace()
5단계 'a' 대입 : 직접 대입
6단계 조건문, 특정 문자 제거 : slice(), replace()
7단계 조건문, 특정 문자 추가(기존 문자열의 맨 끝) : padEnd(), split().reverse().join()
메서드들을 적용하기 전, array에 익숙해져 있어 String을 array안에 각각 담아서 적용하려고 했다. 하지만 array에 적용되는 메서드 말고 String에 적용할 수 있는 메서드를 찾아서 적용하였다.
그렇게 새롭게 알게된 javascript 메서드 padEnd()
이었다. padEnd()
, padStart()
는 메서드는 현재 문자열의 시작을 다른 문자열로 채워, 주어진 길이를 만족하는 새로운 문자열을 반환한다. 메서드 이름에서도 추론할 수 있 듯이, padEnd()
의 채워넣기는 대상 문자열의 끝(우측)부터 적용됩니다. padStart()
의 채워넣기는 대상 문자열의 시작(좌측)부터 적용된다.
참고링크
padStart()
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String/padStart
padEnd()
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String/padEnd
다른사람 풀이
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);
}
✏️ 내 코드와의 차이점
참고링크
charAt()
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String/charAt
repeat()
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String/repeat