2021 KAKAO BLIND RECRUITMENT
https://programmers.co.kr/learn/courses/30/lessons/72410
문제 속 단계 별로 그대로 따라가면 되는데 정규식을 활용하면 좋다.
1단계
new_id의 모든 대문자를 대응되는 소문자로 치환합니다.2단계
newid에서 알파벳 소문자, 숫자, 빼기(-), 밑줄(), 마침표(.)를 제외한 모든 문자를 제거합니다.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이 될 때까지 반복해서 끝에 붙입니다.
def solution(new_id):
#1
new_id = new_id.lower()
#2
new_id = [c for c in new_id if 97<=ord(c)<=122 or 48<=ord(c)<=57 or 45<=ord(c)<=46 or ord(c)==95 ]
#3
for dot in range(len(new_id)-1) :
if new_id[dot] == "." and new_id[dot+1] == "." :
new_id[dot] = ""
new_id = list("".join(new_id))
#4
for dot in range(-1, 1) :
if new_id[dot] == "." :
new_id[dot] = ""
new_id = list("".join(new_id))
#5
if len(new_id) == 0 :
new_id.append("a")
#6
if len(new_id) >= 16 :
new_id = new_id[0:15]
if new_id[-1] == "." :
new_id.pop()
#7
if len(new_id) <= 2 :
while len(new_id) < 3 :
new_id.append(new_id[-1])
return "".join(new_id)
function solution(new_id) {
//1
new_id = new_id.toLowerCase();
//2
new_id = new_id.replace(/[^\a-z\d\.\-\_]/g, "");
// 소문자 a~z 숫자 . - _ 을 제외한 문자들을 지운다.
//3
new_id = new_id.replace(/\.+/g, ".")
// .이 반복되면 . 으로 대체한다.
//4
new_id = new_id.replace(/^\.|\.$/g, "")
// 문자열 맨 앞이나 맨 뒤에 . 이 있으면 지운다.
//5
new_id = new_id.replace(/^$/, "a")
// 문자열 처음부터 끝까지 아무것도 없으면 a 로 대체한다.
//6
new_id = new_id.slice(0,15).replace(/\.$/, "");
// 인덱스 0~14 까지 문자열을 자르고 맨 끝에 .이 있으면 지운다.
//7
const len = new_id.length;
return len > 2 ? new_id : new_id + new_id.charAt(len-1).repeat(3-len);
}