[카카오 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

좋은 웹페이지 즐겨찾기