어디까지 갈 수 있을까?
[정규 표현식] 프로그래머스 신규 아이디 추천 본문
문제링크 programmers.co.kr/learn/courses/30/lessons/72410
처음에는 함수 여러개를 만들어서 다 비교하다가 정규표현식으로 풀면 깔끔하길래 풀어봤다
[답코드]
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)
if len(st)==0:
st = 'a'
else:
st=st[0:15]
st = re.sub('^[.]|[.]$', '', st)
if len(st)<=2:
st+=st[-1]*(3-len(st))
return st
[풀이법]
import re
re.sub(패턴, 바꿀문자열, 문자열) 이다
[^]는 not의 의미, a-z0-9-_. 을 제외한 문자열들은 ''로 치환하고
+는 하나 이상의 의미, '.'이 하나이상 반복되면 '.'으로 치환해준다
^는 처음, $는 마지막이라는 의미, .이 시작 위치에 있거나 마지막에 있으면 ''로 치환해준다
if len(st)==0:
st = 'a'
else:
st=st[0:15]
이 코드는 한 줄로 st='a' if len(st)==0 else st=st[0:15] 이렇게 나타낼 수 있으나,
개인적으로 가독성이 좋은 코드를 좋아하여 사용하지 않을 것 같다.
728x90
'알고리즘 > 알고리즘' 카테고리의 다른 글
다익스트라 (0) | 2021.05.19 |
---|---|
[DP] 백준 1463 1로 만들기 (0) | 2021.02.07 |
[소수 판별] 6588 백준 골드바흐의 추측 (0) | 2021.02.04 |
[유클리드 알고리즘] GCD 함수 (백준 1934 최소공배수) (0) | 2021.02.01 |
투포인터 알고리즘 & 부분합 알고리즘 (0) | 2021.01.03 |
Comments