Algorithm/1일 1코테

[🥰프로그래머스] 신규 아이디 추천 (2021 KAKAO BLIND RECRUITMENT)

대인보우 2022. 2. 4. 09:28
반응형

신규 아이디 추천


 

https://programmers.co.kr/learn/courses/30/lessons/72410

 

코딩테스트 연습 - 신규 아이디 추천

카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로

programmers.co.kr

 

 

내 풀이

import re
def solution(new_id):
    new_id = new_id.lower() # 소문자 변경
    new_id = re.sub(r'[^a-z0-9-_.]', '', new_id) # 특정 특문, 영어, 숫자외 제거 
    new_id_list = list(new_id) # 리스트로 변경
    for i in range(len(new_id_list)-1): # i와 i+1이 같을 경우 i번째는 공백으로 변경
        if new_id_list[i] == '.' and new_id_list[i] == new_id_list[i+1]:
            new_id_list[i] = ''
    new_id = ''.join(new_id_list) # 다시 string으로 변경
    if new_id.startswith('.'): # . 으로 시작하면 
        new_id = new_id[1:] # 삭제
    if new_id.endswith('.'): # . 으로 끝나면
        new_id = new_id[:-1] # 삭제
    if len(new_id) == 0: # 길이가 0일 경우 a
        new_id = 'a'
    if len(new_id) >= 16: # 16보다 길거나 같으면
        new_id = new_id[:15] # 자름
        if new_id.endswith('.'): # 잘랐는데 . 으로 끝나면 없애줌
            new_id = new_id[:-1]
    if len(new_id) <= 2: # 2보다 길면
        new_id = new_id + (3-len(new_id))*new_id[-1] # 마지막 숫자로 3 채워줌
    
    return new_id

 

다른 사람 풀이

import re

def solution(new_id):
    st = new_id
    st = st.lower()
    st = re.sub('[^a-z0-9\-_.]', '', st)
    st = re.sub('\.+', '.', st)
    st = re.sub('^[.]|[.]$', '', st)
    st = 'a' if len(st) == 0 else st[:15]
    st = re.sub('^[.]|[.]$', '', st)
    st = st if len(st) > 2 else st + "".join([st[-1] for i in range(3-len(st))])
    return st

 

^ -> 문자열의 시작이나 not을 의미한다

$ -> 문자열의 끝을 의미한다.

+ -> 어떤 문자가 1회 이상 반복

{n} -> n회 이상 반복

 

반응형