본문 바로가기
알고리즘/문자열

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

by 채채씨 2022. 6. 1.
728x90
반응형

<문제>

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

 

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

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

programmers.co.kr

 


 

<코드>

import re

def solution(new_id):
    new_id = new_id.lower()
    new_id = re.sub(r'[^a-z0-9-_.]', '', new_id)
    new_id = re.sub('\.+', '.', new_id)
    new_id = new_id.strip('.')
    if new_id == '':
        new_id += 'a'
    if len(new_id) >= 16:
        new_id = new_id[:15]
        new_id = new_id.rstrip('.')
    if len(new_id) <= 2:
        while len(new_id) <= 2:
            new_id += new_id[-1]
    return new_id

 


 

<NOTE>

문자열 대체 re.sub(pattern, new_text, string)
string에서 대체하고자하는 pattern을 찾아 new_text로 대체  
  • 정규 표현식 추가 설명
    • r'[pattern]'에서 r은 특수문자 기능을 무시하고 문자 그대로 판단한다는 의미이다.
      • ex) 백슬래쉬는 escape기능을 하지만 r'[pattern]'안에서는 문자 그대로 백슬래쉬를 의미한다.
    • 'pattern+'에서 +는 pattern이 반복되는 것을 찾는다는 의미이다.
      • 위 코드에서는 '\.+'를 사용하여 마침표가 여러번 반복된 것을 찾았는데, r'[pattern]'을 사용해서 r'[.]+'로 표현할 수 있다.
      • replace를 사용해서 replace('..', '.')로 처리하면, 마침표가 3번 반복된 경우는 처리 결과가 여전히 2번 반복된 형태이다. replace를 사용해서 '..'이 없을 때까지 반복해서 처리할 수도 있지만, 개수를 특정하지 않아도 되는 정규식의 +를 활용할 수 있다.
    • [^pattern]에서 괄호 안의 ^는 pattern을 제외한 나머지 문자를 찾는다는 의미이다. (not의 의미)
    • 문자열 처음이나 끝에 마침표가 있는 것을 찾기 위해, strip()을 사용하였다. 이것을 정규 표현식으로 나타내면 '^[.]|[.]$'로 나타낼 수 있다. 괄호 밖의 ^는 시작값을 의미하며 pattern앞에 붙이고, $는 끝값을 의미하며 pattern 뒤에 붙인다. 
728x90
반응형

댓글