나의 답안
import re
def solution(new_id):
new_id = new_id.lower() # 1단계 대문자 to 소문자
new_id = re.sub('[=+,#/\?:^$@*\"※~&%ㆍ!』\\‘|\(\)\[\]\<\>`\'…》{}]', '', new_id) # 2단계 특수문자제거
new_id_cut =""
new_id_cut =new_id[0]
for i in range(1,len(new_id)): # 3단계 연속된 마침표 1개로 치환
if new_id[i-1] + new_id[i] != '..':
new_id_cut += new_id[i]
if new_id_cut[0] == '.': # 4단계 -처음에 . 있을시 제거
new_id_cut = new_id_cut[1:]
if len(new_id_cut) == 0: # 5단계 빈문자열이면 a를 대입
new_id_cut = new_id_cut+"a"
if len(new_id_cut) >= 16: # 6단계 문자열 길이가 16자 이상시 15개의 문자만 반환
new_id_cut = new_id_cut[:15]
if new_id_cut[-1] == '.': # 4단계 -마지막에 . 있을시 제거
new_id_cut = new_id_cut[:-1]
if len(new_id_cut) <= 2: # 7단계 문자열의 길이가 2이하일시 마지막문자를 길이가 3이 될때까지 반복해서 붙임
while len(new_id_cut) < 3:
new_id_cut += new_id_cut[-1]
answer = new_id_cut
return answer
최고답안
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)
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
첫번째 조건 특수문자를 제거하는 조건은 스스로는 풀수없다고 판단하여 구글링의 힘을 빌려 풀었다. 구글링으로 풀었을때도 정규표현식을 알면 더 잘풀수 있겠다는 것을 느꼈지만 최고답안을 보자 이정도로 간결하게 쓸수 있을지는 몰랐다. 첫번째 조건을 제외하면 대부분 혼자서 풀수 있을정도의 수준이였다. 이 문제를 풀어보고나서 정규표현식의 중요성, 유용성을 알게 되었다.