📋 문제 정보

문제 요약

주어진 7단계의 과정을 구현하기

🤔 아이디어

정규식을 사용하든 반복문과 조건문을 사용하든 구현만 하면 되는 문제다. 다만 문제를 푸는 과정에서 Python 정규식과 인덱스에 대한 내용이 헷갈려서 정리한다.

💭 생각 정리

Python에서 정규식

Java에서 정규식을 많이 다뤘기에 정규식을 생각하는 것은 별로 어렵지 않았다. 그러나 Pattern을 컴파일하고 사용해야하는 Java와 달리 Python에서는 패턴을 직접 리터럴로 사용할 수 있었다.

# 컴파일 후 사용
pattern = re.compile(r'[^a-z\d\-\_\.]')		    
new_id = re.sub(pattern, '', new_id)

# 리터럴 사용
new_id = re.sub('[^a-z\d\-\_\.]', '', new_id)

List index 정리

Python에서 마지막 원소에 접근하는 -1 인덱스는 원소가 없으면 런타임 에러가 발생한다.

""[-1] # out of index

그러나 슬라이싱의 경우 해당 인덱스가 존재하지 않더라도 가능한 범위까지 적용되고 런타임 에러는 발생하지 않는다.

"abcde"[:1000] # "abcde"

📄 소스 코드

import re

def solution(new_id):
    # 1단계
    new_id = new_id.lower()
    
    # 2단계
    new_id = re.sub('[^a-z\d\-\_\.]', '', new_id)

    # 3단계
    new_id = re.sub('\.+', '.', new_id)
    
    # 4단계
    new_id = re.sub('^\.|\.$', '', new_id)
    
    # 5단계
    if not new_id:
        new_id = "a"
    
    # 6단계
    new_id = new_id[:15]
    if new_id[-1] == ".":
        new_id = new_id[:-1]
    
    # 7단계
    while len(new_id) <= 2:
        new_id += new_id[-1]
    
    return new_id