📖 2021 KAKAO BLIND RECRUITMENT > 신규 아이디 추천
📖What I thought
그냥 단계 설명된 대로 구현하면 됨.
- lower()함수로 소문자로 바꿔주기
- re.sub()함수로 패턴 아닌 문자들 제거
- .이 연속으로 여러개 → 1개로 치환
- .이 처음/끝이면 제거 → 함수가 기억이 안났음! (양끝 문자클래스 제거하는 함수…)
- 문자열 비었으면 a로! (7단계 보면 길이 3될때까지 채워야하니까 그냥 aaa로 만들자)
- 처음~15번째까지 [0:15]
- 문자열 길이가 3보다 작으면 마지막 문자로 길이 3까지 채우기
3번 !!! 어떻게 해야 속도를 빠르게 할 수 있을까 고민했음
딱 .의 개수-1만큼만 반복문 돌면서 . 하나로 replace하기가 내가 생각한 최선!
처음엔 1~.의 개수만큼 돌았는데 문제 발생 …이렇게 있다고 치면 ..이 .으로 바뀌고 그럼 ..이 되어 얘가 안 바뀜
그러면??? 반복문을 거꾸로 돌아서 .의 개수1까지 돌면?? 긴 거부터 바뀌니까 생략되는 건 없음!!!! 구웃^^
📖풀이
📎구현
import re
def solution(new_id):
# 1st
new_id = new_id.lower()
# 2nd
new_id = re.sub('[^a-z0-9\-_.]','',new_id)
# 4th
new_id = new_id.strip('.')
# 3rd
cnt = new_id.count('.')
for c in range(cnt, 1, -1):
new_id = new_id.replace('.'*c, '.')
# 5th
new_id = 'aaa' if len(new_id)==0 else new_id
# 6th
new_id = new_id[0:15].strip('.')
# 7th
if len(new_id) < 3:
new_id += new_id[-1]*(3-len(new_id))
return new_id📖What I learned
- 정규식을 매번 까먹는다! ㅜㅜ
re.sub(pattern, replace, str) strip함수는 문자열이 아니라 문자클래스가 파라미터로 들어감 (양 끝 문자 클래스에 해당하는 문자들 제거하는 함수)