python/알고리즘 문제풀이

[프로그래머스 | 파이썬3] 신규 아이디 추천_정규표현식, strip활용

빛날희- 2021. 5. 18. 11:41

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

 

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

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

programmers.co.kr

정규표현식과 strip함수를 사용하여 풀었다. 주어진 룰들을 순서대로 구현하는 것이 중요하다. 


import re
def solution(new_id):
	# 소문자 변환
    new_id= new_id.lower()
	
    # 소문자, 숫자, -_.에 해당하는 문자들만 추출하여 생성된 리스트를 join함수로 묶어줌
    p= re.compile('[a-z0-9-_.]+')
    new_id= ''.join(p.findall(new_id))

	# .이 한번이상 반복되는 문자열들을 .으로 바꿔줌
    dot=re.compile("[.]+")
    new_id= dot.sub(".", new_id)
    
    # 처음이나 끝에 있는 . 제거
    new_id= new_id.strip('.')

	# 만약 길이가 0이면 a 추가
    if len(new_id)==0: new_id="a"

	# 만약 16자 이상이면 15자까지만 추출 후 처음이나 마지막에 위치한 . 제거(rstrip사용가능)
	if len(new_id) >= 16: 
        new_id= new_id[:15]
        new_id= new_id.strip('.')
        
    # 2자 이하이면 마지막의 문자를 3자가 될때까지 반복
    if len(new_id) <= 2: new_id+= new_id[-1] * (3-len(new_id))
    
    return new_id

* strip('.')함수는 문자 양쪽에 위치한 .을 제거해 준다. default는 공백으로 strip()를 쓰면 문자 양쪽의 공백이 제거된다. 만일 왼쪽의 .만 없애고 싶다면 lstrip()을, 오른쪽의 .만 없애고 싶다면 rstrip()을 쓸 수 있다. 

 

* 정규표현식의 sub 메소드는 new_id에서 패턴에 해당하는 것들을 첫번째 파라미터로 모두 바꿔주는 기능을 수행한다.