https://programmers.co.kr/learn/courses/30/lessons/72410
정규표현식과 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에서 패턴에 해당하는 것들을 첫번째 파라미터로 모두 바꿔주는 기능을 수행한다.
'python > 알고리즘 문제풀이' 카테고리의 다른 글
[프로그래머스 | 파이썬3] 로또의 최고 순위와 최저 순위 (1) | 2021.05.20 |
---|---|
[프로그래머스 | 파이썬3] 크레인 인형뽑기 게임 (1) | 2021.05.19 |
[프로그래머스 | 파이썬3] 내적_sum함수 활용 (1) | 2021.05.18 |
[프로그래머스 | 파이썬3] 소수 만들기_combinations활용 (2) | 2021.05.17 |
[프로그래머스 | 파이썬3] 음양더하기_ 기본연산식, sum함수 사용 (2) | 2021.05.15 |