코딩테스트 연습/프로그래머스

[Python - 프로그래머스] 2021 KAKAO BLIND RECRUITMENT > 신규 아이디 추천

슈퍼짱짱 2022. 3. 17. 09:50
반응형

(파이썬으로 코딩테스트 연습하기) Programmers > 2021 KAKAO BLIND RECRUITMENT > 신규 아이디 추천

 

 

https://programmers.co.kr/learn/courses/30/lessons/72410

 

코딩테스트 연습 - 신규 아이디 추천

카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로

programmers.co.kr

 


 

Solution

 

import re
def solution2(new_id) :
    # step1
    new_id = new_id.lower()
    # step2
    new_id = re.sub(r"[^a-zA-Z0-9-_.]","",new_id)
    # step3
    new_id = ".".join([i for i in new_id.split(".") if i != ''])
    # step4
    if new_id.endswith(".") :
        new_id = new_id[:-1]  
    return(new_id)

def solution(new_id):
    new_id = solution2(new_id)
    # step5, 6, 7
    if len(new_id)==0 :
        new_id = 'a'
    if len(new_id)<=2 :
        new_id = new_id+new_id[-1]*(3-len(new_id))
    if len(new_id)>=16 :
        new_id = new_id[:15]
        
    return(solution2(new_id))

 


 

문자열 다루는 방법을 아는가에 대해 묻는 문제이다.

이 문제에서 중요한건 정규표현식과 문제에서 예5에 해당하는 "abcdefghijklmn.p" 와 같은 예시이다.

 

"abcdefghijklmn.p"는 step6에서 글자를 15자까지만 남기면 마지막에 "."이 남게된다. 

즉, step6다음 다시 step4로 돌아가 마지막에 "."을 지워주어야한다.

 

따라서 글자수와 관련없는 step1~4를 solution2라는 function으로 하나로 묶고,

soultion2실행 -> step5, 6, 7 실행 -> 다시 solution2를 실행해주었다.

 

정규표현식은 "re"라는 모듈을 활용하면 된다.

 


 

다른 사람의 풀이

 

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

 

step6 이후에 step1~4를 모두 실행할 필요없이 step4만 실행하면 된다.

 

step3(new_id에서 마침표(.)가 2 이상 연속된 부분을 하나의 마침표(.)로 치환합니다.)은 "."을 기준으로 String을 split한 후 다시 합쳐주는 방법으로 풀 수도 있고, 정규표현식으로 풀 수도 있다.

정규표현식에서 '+'는 앞에오는 문자가 최소 1번이상 반복된다는 뜻이다.

 

 

step4(new_id에서 마침표(.) 처음이나 끝에 위치한다면 제거합니다.)은 String.startwith(".")String.endwith(".")으로도 할 수 있지만, 정규표현식으로 '^[.]|[.]$' 로도 표현할 수 있다. 

정규표현식에서 ^는 ^뒤에오는 문자로 시작한다는 뜻이고, $는 $앞에오는 문자로 끝난다는 뜻이다.

 

  

반응형