프로그래머스 Lv1. 신규 아이디 추천

용상윤·2021년 4월 4일
0

문제

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이 될 때까지 반복해서 끝에 붙입니다.


코드

python

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)
    

js (정규식 사용)


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);
}
profile
달리는 중!

0개의 댓글