[2021 KAKAO BLIND] 신규 아이디 추천 Python re
OnlineJudge

[2021 KAKAO BLIND] 신규 아이디 추천 Python re

반응형

문제로이동

 

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

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

programmers.co.kr



문제 설명

re 라이브러리를 사용했습니다.

 

좌/우측 특정 문자 제거

좌/우측 특정 문자 또는 공백 제거엔 strip(), lstrip(), rstrip()을 사용합니다.

이번 문제에서는 .을 제거하는 것이므로 strip('.')과 같이 사용할 수 있었습니다.

 

치환 및 제거

정규표현식에 해당하는 문자들을 치환, 제거하기위해 re.sub 함수를 사용했습니다.

 

위 두 기능을 제외하고는 하드코딩으로 가능하기에 생략하겠습니다.

 

이번 문제를 풀면서 re 기능에 대해 숙지할 수 있었고, 정규 표현식을 응용할 수 있었습니다.


소스 코드

Python 최적화 전

import re
def solution(new_id):
    #1단계 소문자 치환
    new_id=new_id.lower()
    
    #2단계 제거
    lvl2 = re.compile('[0-9a-z_.\-]+')
    new_id = lvl2.findall(new_id)
    new_id = ''.join(new_id)
    
    #3단계 . 압축
    while '..' in new_id:
        new_id = new_id.replace('..','.')
    
    #4단계 양끝 . 제거
    new_id = new_id.strip('.')
    
    #5단계 빈문자열 a 추가
    if new_id =='':new_id+='a'
        
    #6단계 15개제외하고 문자모두제거
    if len(new_id)>=16:
        new_id = new_id[:15]
        new_id = new_id.rstrip('.')#6단계 우측 . 제거
        
    #7단계
    if len(new_id)<=2:
        idSize = len(new_id)
        addchar = new_id[idSize-1:]
        while len(new_id)<3:
            new_id+=addchar
    answer = new_id
    return answer

Python 최적화 후

import re
def solution(new_id):    
    #1단계 & 2단계 소문자 치환, 제거
    answer = re.sub('[^0-9a-z_.\-]+','',new_id.lower())
    
    #3단계 . 2번 이상을 1개로 압축
    answer = re.sub('\.\.+','.',answer)
    
    #4단계 양끝 . 제거
    answer = answer.strip('.')
    
    #5단계 빈문자열 a 추가
    if answer =='': answer='a'
        
    #6단계 15개제외하고 문자모두제거, 우측 . 제거
    answer = answer[:15].rstrip('.')
        
    #7단계 길이 3 될 때까지 끝 문자 추가    
    answer+=answer[-1]*(3-len(answer))
        
    return answer
반응형

'OnlineJudge' 카테고리의 다른 글

백준 16954 움직이는 미로 탈출 python  (0) 2021.04.20
SWEA 1953 탈주범 검거 java 풀이  (0) 2021.04.15
SWEA 5644 무선충전 Java, Python  (0) 2021.04.12
SWEA 1249 보급로 JAVA  (0) 2021.04.12
백준 6497 전력난 java  (0) 2021.03.27