ref: https://programmers.co.kr/learn/courses/30/lessons/72410
입력된 아이디와 유사하면서 규칙에 맞는 아이디를 추천해주는 프로그램을 개발
아이디의 길이는 3자 이상 15자 이하여야
아이디는 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.) 문자만 사용할 수 있습니다.
마침표(.)는 처음과 끝에 사용할 수 없으며 또한 연속으로 사용할 수 없습니다.
new_id는 길이 1 이상 1,000 이하인 문자열
문자열 다루는 문제, 구현 문제
new_id의 길이가 1000 이하 밖에 되지 않기 때문에,
1초에 2000만번 연산을 하는 파이썬에겐 충분하다.
def solution(new_id):
new_id = new_id.lower()
tmp = ''
for i in new_id:
if i.isdigit() or i.isalpha():
tmp += i
elif i in ['_', '-', '.']:
if i == '.' and tmp and tmp[-1] == '.':
continue
tmp += i
else:
continue
if tmp and tmp[0] == '.':
tmp = tmp[1:]
if tmp and tmp[-1] == '.':
tmp = tmp[:-1]
if len(tmp) == 0:
tmp += 'a'
if len(tmp) >=16:
tmp = tmp[:15]
if tmp[-1] == '.':
tmp = tmp[:-1]
if len(tmp) <= 2:
while len(tmp) < 3:
tmp += tmp[-1]
return tmp
function solution(new_id) {
const alpha = /[a-zA-Z0-9]/;
const useChar = ['_','-','.'];
//1
const lowerId = new_id.toLowerCase();
//2,3
let answer = '';
for(let i=0; i<lowerId.length; i++){
const now = lowerId[i];
if (alpha.test(now) || useChar.includes(now)){
if (now === '.' && answer[answer.length-1] === '.'){
continue
}
answer += now;
}
}
//4
if (answer[0] === '.'){
answer = answer.slice(1);
}
if (answer[answer.length-1] === '.'){
answer = answer.slice(0,answer.length-1);
}
//5
if (answer === ''){
answer += 'a';
};
//6
if (answer.length >= 16){
answer = answer.slice(0,15);
if (answer[answer.length-1] === '.'){
answer = answer.slice(0,answer.length-1);
};
};
//7
if(answer.length <=2){
while(answer.length <=2){
answer += answer[answer.length-1];
}
};
return answer
}
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);
}
정규표현식의 위대함...