[카카오 2021] 신규 아이디 추천
내 풀이 1.
⇒ 정규표현식 사용
import re
def solution(new_id):
answer = ''
#대문자를 소문자로 치환
new_id = new_id.lower()
#소문자,숫자,-,_,.제외
new_id = re.sub('[^0-9a-z-_.]','',new_id)
#.가 2번 이상 반복 -> 하나로 치환
new_id = re.sub('[.]{2,}','.',new_id)
#.가 처음이나 끝에 위치하는 경우 제거
new_id = re.sub('^\.|\.$','',new_id)
#빈 문자열인 경우 a를 대입
new_id = 'a' if len(new_id) == 0 else new_id
#길이가 16이상이면 15뒤 제거
new_id = new_id[:15] if len(new_id)>=16 else new_id
#끝에 . 있으면 제거
new_id = re.sub('\.$', '', new_id)
#길이2 이하이면 마지막 문자를 길이가 3될때까지 반복
new_id = new_id+new_id[-1]*(3-len(new_id)) if len(new_id)<=2 else new_id
return new_id
⇒ 헷갈린 개념 :
- ` 형식으로 써야함
- ^를 사용할때는
^원하는 문자
형식으로 써야함
⇒ 개선사항
- 3번째 조건 : 2번 이상 반복을 한번으로 치환하는 것 →
[.]{2,}
를\.+
로 바꿀 수 있음 (한번으로 치환가능하므로) - 6,7번째 조건 합칠 수 있음 →
new_id = re.sub('[.]$', '', new_id[:15])
로 한꺼번에 처리가능
다른 사람 풀이1.
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
다른 사람 풀이 2.
from re import sub
def solution(new_id):
new_id = new_id.lower()
new_id = sub("[^a-z0-9-_.]", "", new_id)
new_id = sub("\.+", ".", new_id)
new_id = sub("(^\.|\.$)", "", new_id)
new_id = new_id if new_id else "a"
new_id = sub("\.$", "", new_id[:15])
new_id = new_id if len(new_id) > 3 else new_id + new_id[-1] * (3 - len(new_id))
return new_id
Author And Source
이 문제에 관하여([카카오 2021] 신규 아이디 추천), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@d-helle/카카오-2021-신규-아이디-추천저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)