문제
신규 가입자가 잘못된 아이디를 입력하면 아래 7가지 규칙에 따라 추천 아이디로 변환해줘야 한다.
1- new_id의 모든 대문자를 대응되는 소문자로 치환
2- new_id에서 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 모든 문자 제거
3- new_id에서 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환
4- new_id에서 마침표(.)가 처음이나 끝에 위치한다면 제거
5- new_id가 빈 문자열이라면, new_id에 "a"를 대입
6- new_id의 길이가 16자 이상이면, new_id의 첫 15개의 문자를 제외한 나머지 문자들 모두 제거 만약 제거 후 마침표(.) 가 new_id의 끝에 위치한다면 끝에 위치한 마침표(.) 문자를 제거
7- new_id의 길이가 2자 이하라면, new_id의 마지막 문자를 길이가 3이 될 때까지 반복해서 끝에 추가
내 코드
import re
def solution(new_id):
#1
st = new_id.lower()
#2
st = re.sub('[^a-z0-9-_.]', '', st)
#3
st = re.sub('(([.])\\2{1,})', '.', st)
#4
if st[0] == '.':
st = st.replace('.','', 1)
if len(st)-1 > 0 and st[len(st)-1] == '.':
st = st.rstrip('.')
#5
if st == "":
st = st.replace("",'a')
#6
if len(st) > 15:
if st[14] == '.':
st=st[0:14]
else:
st=st[0:15]
#7
if len(st) < 3:
tmp = st[len(st)-1]
for i in range(3-len(st)):
st += tmp
return st
문제 풀이
- lower() : 소문자로 치환
- re.sub() : 정규화식으로 검색 후 치환
- re.sub('[^a-z0-9-_.]', '', st) : a~z, 0~9, -, _, . 제외 모든 문자는 공백으로 치환
- re.sub('(([.])\\\\2{1,})', '.', st) : '.'이 2번 이상 포함되면 '.'으로 치환
- ({2,}면 3번 이상, {3,}면 4번 이상)
- rstrip() : 오른쪽 문자 치환
고수 풀이
정규화는 필요할 때 찾아보면서 학습하자..
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)
st = 'a' if len(st) == 0 else st[:15]
st = re.sub('^[.]|[.]$', '', st)
st = st if len(st) > 2 else st + "".join([st[-1] for i in range(3-len(st))])
return st
'Python > Programmers' 카테고리의 다른 글
Lv.1-음양 더하기 (0) | 2021.07.07 |
---|---|
Lv.1-소수 찾기 (0) | 2021.07.07 |
Lv.1-K번째 숫자 꺼내기 (0) | 2021.07.07 |
Lv.1-마라톤 (0) | 2021.07.07 |
Lv.1-폰켓몬 (0) | 2021.07.07 |