본문 바로가기

개발/Python

2021 KAKAO BLIND RECRUITMENT - 신규 아이디 추천

https://programmers.co.kr/learn/courses/30/lessons/72410?language=python3 

 

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

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

programmers.co.kr


내 소스

import re

def solution(new_id):
    str_char = "abcdefghijklmnopqrstuvwxyz0123456789-_."

    answer=new_id.lower()
    answer = ''.join(x for x in answer if x in str_char)
    answer = re.sub('(([.])\\2{1,})', '.', answer)
    if answer[0] == '.':
        answer=answer[1:]
    if len(answer)==0:
        answer='a'
    else :
        if answer[-1] == '.':
            answer = answer[:-1]
    if len(answer) > 15:
        answer=answer[:15]
    if answer[-1] == '.':
        answer = answer[:-1]
    if len(answer)<3:
        for i in range (0,3-len(answer)):
            answer+=answer[-1]

    return answer

 

1단계부터 차례대로 조건대로 맞춰서 해주면 되는 간단한 문제였다.

 

 

 

 

 

 

 

 

좀 소스를 간단하게 만들 수 있던 포인트는

2단계 new_id에서 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 모든 문자를 제거합니다. 조건에서

str_char = "abcdefghijklmnopqrstuvwxyz0123456789-_."
answer = ''.join(x for x in answer if x in str_char)

다음과 같이 허용되는 문자열을 선언해준 후, 이중 for문 등을 이용하는 방법이 아닌 join 함수를 사용해서 해당되지 않은 문자는 제거하는 방법

 

3단계 new_id에서 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환합니다. 조건에서

import re
answer = re.sub('(([.])\\2{1,})', '.', answer)

re 라이브러리를 활용해서 sub 함수로 문자 '.' 가 2글자 이상 연속될 시 '.' 하나로 치환하는 방법

 

 

 

 

 

 

 

 

 

위 두 조건에서 소스를 줄인 것이 간단하게 만드는 포인트였던 것 같다.

 

그 아래 if 조건문들은 거의 조건 순서대로 직역(?) 해서 단순하게 만들었다!

특히 6단계 이후 마지막 문자가 '.' 인경우 다시 한 번 확인해서 제거해주는 부분은 위에서 사용된 동일한 소스가 한번 더 사용되기 때문에 좀 정리할 수도 있을 것 같다.