[알고리즘] 프로그래머스 - 신규 아이디 추천

June·2021년 2월 24일
0

알고리즘

목록 보기
91/260
post-custom-banner

프로그래머스 - 2021 KAKAO BLIND RECRUITMENT 신규 아이디 추천

내 풀이

def solution(new_id):
    # 1단계
    new_id = new_id.lower()

    # 2단계
    for char in new_id:
        if char.isalnum():
            continue
        elif char in ['-', '_', '.']:
            continue
        else:
            new_id = new_id.replace(char, '')


    # 3단계
    while ".." in new_id:
        print("wtf", new_id)
        new_id = new_id.replace("..", ".")

    # 4단계
    new_id = new_id.rstrip(".").lstrip(".")

    # 5단계
    if len(new_id) == 0:
        new_id = "a"

    # 6단계
    if len(new_id) >= 16:
        new_id = new_id[:15]
        if new_id[-1] == ".":
            new_id = new_id[:len(new_id)-1]

    # 7단계
    if len(new_id) <= 2:
        while len(new_id) < 3:
            new_id = new_id + new_id[-1]

    return new_id

처음에는 3단계에서 단순히 new_id = new_id.replace("..", ".") 로 했다가 틀렸다. ".."이 안남아있게 계속 해줘야한다.

다른 사람 풀이

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

정규식을 이용한 훨씬 간결한 풀이다.

post-custom-banner

0개의 댓글