Q. 다음의 조건에 맞게 입력된 id를 치환하라.

  • 1단계
    new_id의 모든 대문자를 대응되는 소문자로 치환합니다.
  • 2단계
    newid에서 알파벳 소문자, 숫자, 빼기(-), 밑줄(), 마침표(.)를 제외한 모든 문자를 제거합니다.
  • 3단계
    new_id에서 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환합니다.
  • 4단계
    new_id에서 마침표(.)가 처음이나 끝에 위치한다면 제거합니다.
  • 5단계
    new_id가 빈 문자열이라면, new_id에 "a"를 대입합니다.
  • 6단계
    new_id의 길이가 16자 이상이면, new_id의 첫 15개의 문자를 제외한 나머지 문자들을 모두 제거합니다.
    만약 제거 후 마침표(.)가 new_id의 끝에 위치한다면 끝에 위치한 마침표(.) 문자를 제거합니다.
  • 7단계
    new_id의 길이가 2자 이하라면, new_id의 마지막 문자를 new_id의 길이가 3이 될 때까지 반복해서 끝에 붙입니다.

나의 답안

import re
def solution(new_id):
    new_id = new_id.lower() # 1단계 대문자 to 소문자
    new_id = re.sub('[=+,#/\?:^$@*\"※~&%ㆍ!』\\‘|\(\)\[\]\<\>`\'…》{}]', '', new_id) # 2단계 특수문자제거
    
    new_id_cut =""
    new_id_cut =new_id[0] 
    
    for i in range(1,len(new_id)): # 3단계 연속된 마침표 1개로 치환
        if new_id[i-1] + new_id[i] != '..':
            new_id_cut += new_id[i]
            
    if new_id_cut[0] == '.': # 4단계 -처음에 . 있을시 제거
        new_id_cut = new_id_cut[1:]
    
    if len(new_id_cut) == 0: # 5단계 빈문자열이면 a를 대입
        new_id_cut = new_id_cut+"a"
        
    if len(new_id_cut) >= 16: # 6단계 문자열 길이가 16자 이상시 15개의 문자만 반환
        new_id_cut = new_id_cut[:15]
    
    if new_id_cut[-1] == '.': # 4단계 -마지막에 . 있을시 제거
        new_id_cut = new_id_cut[:-1]    
    
    if len(new_id_cut) <= 2: # 7단계 문자열의 길이가 2이하일시 마지막문자를 길이가 3이 될때까지 반복해서 붙임
        while len(new_id_cut) < 3:
            new_id_cut += new_id_cut[-1]
            
    answer = new_id_cut
    return answer

최고답안

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

느낀점

첫번째 조건 특수문자를 제거하는 조건은 스스로는 풀수없다고 판단하여 구글링의 힘을 빌려 풀었다. 구글링으로 풀었을때도 정규표현식을 알면 더 잘풀수 있겠다는 것을 느꼈지만 최고답안을 보자 이정도로 간결하게 쓸수 있을지는 몰랐다. 첫번째 조건을 제외하면 대부분 혼자서 풀수 있을정도의 수준이였다. 이 문제를 풀어보고나서 정규표현식의 중요성, 유용성을 알게 되었다.

profile
오늘 더 좋은 사람, 더 좋은 하루

0개의 댓글

관련 채용 정보

Powered by GraphCDN, the GraphQL CDN