알고리즘

[프로그래머스] 신규 아이디 추천

Dev... 2021. 5. 8. 15:03

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

 

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

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

programmers.co.kr

단계별로 나오는 설명대로 그대로 구현하면 되는 문제다.

정규표현식과 3단계 같은 경우 다른사람의 코드를 참고해 풀었다.

​

처음에는 3단계 부분도 정규표현식을 이용해 이렇게 작성했다.

 regex = re.compile('[.]{2,}')
 find = regex.findall(new_id)
 
 if find: # 3단계
     for i in find:
         new_id = new_id.replace(i,'.')

.이 2개이상 나오는 것들을 찾아서 new_id에서 .으로 대체하도록 했는데 테스트케이스 20, 21이 통과가 되지 않았다..

while '..' in new_id: # 3단계
        new_id = new_id.replace('..', '.')

while을 사용해 ..들을 모두 .으로 바꿔주니 해결되었다.

 

그리고 replace 함수 대신 re의 sub함수를 사용해도 된다.

re.sub('패턴', '바꿀문자열', '문자열', 바꿀횟수)

 

정답코드

import re
def solution(new_id):
    new_id = new_id.lower() # 1단계
    
    regex = re.compile('[^a-z0-9-_.]')
    find = regex.findall(new_id)
    if find: # 2단계
        for i in find:
            new_id = new_id.replace(i, '')

    while '..' in new_id: # 3단계
        new_id = new_id.replace('..', '.')
    
    new_id = new_id.strip('.') # 4단계
    
    if not new_id: # 5단계
        new_id = new_id + 'a'
    
    if len(new_id) >= 16: # 6단계
        new_id = new_id[:15]
        new_id = new_id.strip('.')

    if len(new_id) <= 2: # 7단계
        new_id = new_id + new_id[-1] * (3 - len(new_id))
       
    return new_id