본문 바로가기
Algorithm/프로그래머스 문제 풀이

[Level 1] [python] 신규아이디 추천

by B_Tori 2021. 12. 28.

문제

파이썬 풀이

import re

def solution(new_id):
    new_id = new_id.lower() #1단계
    #2단계
    new_id = re.sub('[=+,#/\?:^$@*※~&%!\(\)\[\]\<\>\{\}]', '', new_id)
    #3단계
    new_id = re.sub('[.]\.+','.',new_id)
    #4단계
    new_id = new_id.strip('.')
    #5단계
    if not new_id :
        new_id = "a"
    #6단계
    if len(new_id) > 15 :
        new_id = new_id[0:15]
        if new_id[-1] == "." :
            new_id = new_id[:-1]
    #7단계
    while len(new_id) < 3 :
        new_id += new_id[-1] 
    answer = new_id
    return answer

1단계 소문자 변환

파이썬의 lower()함수를 이용하여 모든 알파벳에 대해 소문자로 변환해주었다.

2단계 특수문자 제거

정규표현식과 re.sub()함수를 이용하여 특수문자를 ""(빈 문자열)로 치환해주었다.

re.sub(패턴, 바꿀 문자열, 검사할 문자열, 바꿀횟수) 와 같이 사용하고 바꿀 횟수를 생략하면 찾은 문자열을 모두 바꾼다.

3단계 중복 점 제거

re.sub함수를 이용하여 .이 반복되는 구간을 찾아 "."으로 치환해주었다.

4단계 양 끝 점 제거

strip()함수를 이용하였다.

stript함수에 인자를 전달하지 않으면 양 끝 공백을 제거하지만, 인수로 문자를 전달해주면 해당 문자가 양 끝에 있을 시 제거해준다.

따라서 함수에 인자로 "."을 전달하여 양 끝의 점을 제거해주었다

5단계 빈 문자열 시 a 대입

빈 문자열은 False를 반환하기 때문에 if not new_id를 통해 빈 문자열 시 not False -> True가 되어 해당 조건문이 실행되어 new_id에 a를 대입해준다.

6단계 15자리 초과 문자열 잘라내기

여기서 처음에 간과했던 부분이 나왔다.

바로 15자리로 자른다음 마지막 문자가 .(점)이 될 수 있다는 점이다.

따라서 인덱싱을 통해 15자리로 자른 후 마지막 글자가 .인지 확인하여 .이면 .을 제거해주어야한다.

7단계 3자리로 맞춰주기

3자리 이하일 경우 [-1] 즉 마지막 글자를 현재 new_id값을 붙여준다.

 

댓글