강승현입니다
    • 홈
    • 태그
    • 방명록

    카테고리

    • 전체 글 (118)
      • 후기 (38)
        • 경험 (15)
        • SSAFY (9)
        • 코딩테스트 (3)
        • 넥스터즈 (6)
        • 회고 (5)
      • Degrees (2)
      • Tech (33)
      • OnlineJudge (45)
    OnlineJudge

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

    CODe_byCODe_·2021. 4. 12. 22:56

    문제로이동

     

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

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

    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
    • SWEA 1953 탈주범 검거 java 풀이
    • SWEA 5644 무선충전 Java, Python
    • SWEA 1249 보급로 JAVA
    CODe_
    CODe_
    개발과 관련된 다양한 정보를 몰입감있게 전달합니다.
    최신 글

    티스토리툴바