나의 풀이
- 조건이 까다로워서 정규 표현식으로 풀었다.
- [ic]+[/ic], [ic]^[/ic], [ic]$[/ic] 등 패턴을 익히느라 풀이까지는 시간이 조금 걸렸다.
import re
def solution(new_id):
# 대문자 -> 소문자
new_id = new_id.lower()
# 허용되는 문자만 받아오기
new_id = re.sub(r"[^0-9a-z-_.]", "", new_id)
# .는 그대로 쓰면 문자 전체가 됨
new_id = re.sub(r"[.]+", ".", new_id)
new_id = re.sub("^[.]|[.]$", "", new_id)
# 길이 0 처리
if not len(new_id):
new_id = "a"
# 길이 16 이상 처리
if len(new_id) >= 16:
new_id = new_id[:15]
new_id = re.sub(r"[.]$", "", new_id)
else:
while True:
if len(new_id) <= 2:
new_id += new_id[-1]
else:
break
return new_id
다른 사람 풀이
- 길이 처리할 때 조건들을 통합해 처리해서 더 간단하게 코드를 작성했다.
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