[프로그래머스 Lv1] 신규 아이디 추천(python)

이진규·2022년 1월 13일
1

프로그래머스(PYTHON)

목록 보기
11/64

문제

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

나의 코드 (답안참조)

"""
1. 아이디어
정규식과 구현능력을 테스트 하는 문제이므로 문제 조건에 맞춰 구현하면 된다.

2. 시간복잡도
O(1)
"""

import re

def solution(new_id):
    
    # 1단계
    new_id = new_id.lower()
    
    # 2단계
    new_id = re.sub("[^a-z\d\-\_\.]", "" , new_id) 
    """ 소문자(a-z), 숫자(\d), 빼기(\-), 밑줄(\-), 마침표(\.)를 제외한 
    (대괄호 [] 맨 앞에 ^를 붙여준다.) 모든 문자 제거 """
    
    # 3단계
    new_id = re.sub("\.\.+", ".", new_id)
    
    # 4단계
    if new_id[0] == '.':
        if len(new_id) > 1:
            new_id = new_id[1:]
    if new_id[-1] == '.':
        new_id = new_id[:-1]
        
    # 5단계
    if not new_id: # 빈 문자열이면
        new_id += 'a'
    
    # 6단계
    if len(new_id) > 15:
        new_id = new_id[:15]
        if new_id[-1] == '.':
            new_id = new_id[:-1]
        
    # 7단계
    if len(new_id) <= 2:
        tmp_str = new_id[-1]
        while len(new_id) != 3:
            new_id += tmp_str
    
    return new_id

다른 사람의 코드


"""
1. 아이디어

2. 시간복잡도
O(1)
"""

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
    

느낀점

다시 이 문제를 볼때는 정규식을 한번 공부할 필요가 있다.

profile
항상 궁금해하고 공부하고 기록하자.

0개의 댓글