[프로그래머스] 신규 아이디 추천

nayoon·2021년 6월 3일
0

Algorithm

목록 보기
45/55
import re

def solution(new_id):
    id = new_id
    # lv1
    id = id.lower()
    
    # lv2
    id = re.sub('[^a-zA-Z0-9_\-\_\.]', '', id)
    
    # lv3
    while '..' in id:
        id = id.replace('..', '.')
    
    # lv4
    if id.startswith('.'):
        id = id[1:]
    if id.endswith('.'):
        id = id[:-1]
    
    # lv5
    if len(id) == 0:
        id = 'a'
    
    # lv6
    if len(id) >= 16:
        id = id[:15]
        while id[-1] == '.':
            id = id[:-1]
    
    # lv7
    if len(id) <= 2:
        while len(id) < 3:
            id += id[-1]
    return id

지문에 나와있는대로 짰어요..와 같은 말보단..70%의 내 힘과 30%의 모두의 힘을 합쳐서 짰습니다..

한 3번은 파이썬으로 풀고 1번은 자바로 푼 문제이다.

2단계 규칙은 정규 표현식만 알면 정말 뚝딱뚝딱 되기 때문에 꼭..기억해두고 싶다.

3단계 규칙은 마침표(.)가 연속으로 2번 이상 있으면, 마침표(.) 1개로 치환하기였는데 위와 같이 잤다.

  # lv3
    while '..' in id:
        id = id.replace('..', '.')

내가 처음부터 저리 짠 건 아니고.. 누가 저렇게 잤는데 while '..' in id 와 같은 문법을 보고 박수 치며 머릿 속에 넣어놨는데 잘 들어갔는지 또 푸니까 저절로 아 이거 써야지 싶었다..

4단계 규칙은 첫번째나 마지막에 마침표(.)가 들어가면 없애라는 것이었다.

    # lv4
    if id.startswith('.'):
        id = id[1:]
    if id.endswith('.'):
        id = id[:-1]

id가 empty할 지 아닐지 모르는 상태에서 id의 index에 접근하면 다음과 같은 에러가 날 수 있다.

IndexError: string index out of range

그렇지만 startswith와 endswith는 없으면 False를 반환함으로 empty한 지 아닌지를 검사할 필요없이 그냥 쓰면 된다.

profile
뚜벅뚜벅 열심히 공부하는 개발자

0개의 댓글