📖 2021 KAKAO BLIND RECRUITMENT > 신규 아이디 추천

📖What I thought

그냥 단계 설명된 대로 구현하면 됨.

  1. lower()함수로 소문자로 바꿔주기
  2. re.sub()함수로 패턴 아닌 문자들 제거
  3. .이 연속으로 여러개 → 1개로 치환
  4. .이 처음/끝이면 제거 → 함수가 기억이 안났음! (양끝 문자클래스 제거하는 함수…)
  5. 문자열 비었으면 a로! (7단계 보면 길이 3될때까지 채워야하니까 그냥 aaa로 만들자)
  6. 처음~15번째까지 [0:15]
  7. 문자열 길이가 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

  1. 정규식을 매번 까먹는다! ㅜㅜ re.sub(pattern, replace, str)
  2. strip 함수는 문자열이 아니라 문자클래스가 파라미터로 들어감 (양 끝 문자 클래스에 해당하는 문자들 제거하는 함수)

📖관련 지식

📎[[String#📎strip( [chars])|strip()]]

📎re.sub()