철갑이의 이모저모

[Programmers] 신규 아이디 추천 with Python 본문

알고리즘

[Programmers] 신규 아이디 추천 with Python

철갑 2022. 1. 29. 19:14
728x90

문제

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

 

코딩테스트 연습 - 신규 아이디 추천

카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로

programmers.co.kr

풀이

https://docs.python.org/3/library/re.html

 

re — Regular expression operations — Python 3.10.2 documentation

This module provides regular expression matching operations similar to those found in Perl. Both patterns and strings to be searched can be Unicode strings (str) as well as 8-bit strings (bytes). However, Unicode strings and 8-bit strings cannot be mixed:

docs.python.org

re.sub('정규식패턴', '교체할문자', '문자열') 을 사용해서 풀이

아래의 표는 사용한 정규식을 간단하게 작성한 것이다.

[] 문자의 집합을 나타낼 때 사용
a-z 소문자를 의미
\d 숫자의 집합을 나타냄 [0-9] 와 같은 의미
^ not 또는 문자의 시작을 의미
\ 특수문자 표현시 앞에 작성 (ex. \_ , \-)
| or 의 의미
+ 반복을 의미
$ 문자열의 끝을 의미

import re

def solution(new_id):
    new_id = re.sub('[^a-z\d\-\_\.]','',new_id.lower()) # 1,2단계
    new_id = re.sub('\.\.+','.',new_id) # 3단계
    new_id = re.sub('^\.|\.$','',new_id) # 4단계
    if (len(new_id) == 0) :
        new_id = 'a' # 5단계
    if (len(new_id) >= 16) :
        new_id = re.sub('\.$','',new_id[0:15]) # 6단계
    while len(new_id) < 3:
        new_id += new_id[-1:] # 7단계
    return new_id

728x90