새소식

Problem solving/문제 풀이 - 2022.09.27

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

  • -
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

나의 풀이

  • 조건이 까다로워서 정규 표현식으로 풀었다.
  • [ic]+[/ic], [ic]^[/ic], [ic]$[/ic] 등 패턴을 익히느라 풀이까지는 시간이 조금 걸렸다.

http://pythonstudy.xyz/python/article/401-%EC%A0%95%EA%B7%9C-%ED%91%9C%ED%98%84%EC%8B%9D-Regex

import re

def solution(new_id):
    # 대문자 -> 소문자
    new_id = new_id.lower()
    # 허용되는 문자만 받아오기
    new_id = re.sub(r"[^0-9a-z-_.]", "", new_id)
    # .는 그대로 쓰면 문자 전체가 됨
    new_id = re.sub(r"[.]+", ".", new_id)
    new_id = re.sub("^[.]|[.]$", "", new_id)
    # 길이 0 처리
    if not len(new_id):
        new_id = "a"
    # 길이 16 이상 처리
    if len(new_id) >= 16:
        new_id = new_id[:15]
        new_id = re.sub(r"[.]$", "", new_id)
    else:
        while True:
            if len(new_id) <= 2:
                new_id += new_id[-1]
            else:
                break
                
    return new_id

 

다른 사람 풀이

  • 길이 처리할 때 조건들을 통합해 처리해서 더 간단하게 코드를 작성했다.
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
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.