소스 코드

def solution(new_id):
    answer = ''

    # 대문자 -> 소문자
    temp = new_id[:].lower()

    # 소문자, 숫자, -, _, . 제외한 모든 문자 제거
    temp_answer = ''
    for q in temp:
        if (97 <= ord(q) <= 122) or (48 <= ord(q) <= 57) or (45 <= ord(q) <= 46) or ord(q) == 95:
            temp_answer += q

    # ... 치환
    check = 0
    for w in temp_answer:
        if check == 0:
            if w == '.':
                check = 1

            else:
                answer += w

        else:
            if w != '.':
                check = 0
                answer += '.' + w

    # . 처음 끝 제거
    answer = answer.strip('.')

    # 빈 문자열일 경우 a입력
    if len(answer) == 0:
        answer = 'a'

    # 16자리 이상 :16까지만 출력, 마지막이 . 이면 . 제거
    if len(answer) >= 16:
        answer = answer[:15]
        if answer[-1] == '.':
            answer = answer.rstrip('.')

    # 2자 이하면, 마지막 문자 3이 될 때까지 반복
    if len(answer) <= 2:
        while True:
            answer += answer[-1]
            if len(answer) == 3:
                break

    return answer

 


해결 방법

1. 각 단계를 순서대로 코드로 작성하면 됨

 

2. strip을 활용하면 끝에 있는 글자 지우는게 수월함(str은 del, pop 등이 안먹음)


느낀 점

정규식을 사용하면 매우 깔끔하게 정리가 가능하더라...

 

ps. 개인적인 코드와 코드를 작성의 이유를 적은 것입니다.

 

오류적절치 않은 문법이 존재할 수 있으며, 다른 분들께는 굉장히 비효율적인 방법으로 여겨질 수 있습니다.

 

혹시 개선 사항, 오류 및 문제에 대한 수정 사항 등을 댓글로 남겨주신다면 감사한 마음으로 배우고 수정하겠습니다.