[프로그래머스/파이썬] Level 1 신규 아이디 추천

bye9·2021년 2월 18일
0

알고리즘(코테)

목록 보기
80/130

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


알고리즘 분류

  • 구현

문제풀이

복잡하지만 차근차근 1단계부터 7단계까지 구현해주었다.

다만 "3단계 new_id에서 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환합니다." 부분을 좀 억지로 구현해낸 것 같아서 더 나은 풀이를 참고해봐야겠다.

프로그래머스 더 나은 코드

def solution(new_id):
    answer = ''
    # 1
    new_id = new_id.lower()
    # 2
    for c in new_id:
        if c.isalpha() or c.isdigit() or c in ['-', '_', '.']:
            answer += c
    # 3
    while '..' in answer:
        answer = answer.replace('..', '.')
    # 4
    if answer[0] == '.':
        answer = answer[1:] if len(answer) > 1 else '.'
    if answer[-1] == '.':
        answer = answer[:-1]
    # 5
    if answer == '':
        answer = 'a'
    # 6
    if len(answer) > 15:
        answer = answer[:15]
        if answer[-1] == '.':
            answer = answer[:-1]
    # 7
    while len(answer) < 3:
        answer += answer[-1]
    return answer

소스코드

def solution(new_id):
    step1=[]
    for i in new_id:
        if ord('A')<=ord(i)<=ord('Z'):
            step1.append(chr(ord(i)+32))
        else:
            step1.append(i)

    step2=[]
    for i in step1:
        if ord('a')<=ord(i)<=ord('z') or i.isdigit()==True or i=="-" or i=="_" or i==".":
            step2.append(i)

    step3="".join(step2)
    for i in range(1000):
        if step3.find("..")!=-1:
            step3=step3.replace("..",".")
        else:
            break
            
    step4=[]
    for i in range(len(step3)):
        if step3[i]!=".":
            step4.append(step3[i])
        elif step3[i]==".":
            if i==0 or i==len(step3)-1:
                continue
            else:
                step4.append(step3[i])

    if len(step4)==0:
        return("a"*3)

    step5=step4
    while len(step5)>=16:
        step5.pop()
    if step5[-1]==".":
        step5.pop()

    step6=step5
    while len(step6)<=2:
        step6.append(step6[-1])

    step7="".join(step6)
    return(step7)

0개의 댓글