본문 바로가기
프로그래머스/Lv.1

2021 KAKAO BLIND RECRUITMENT > 신규 아이디 추천 - Python, 정규표현식

by 아찌방 2024. 12. 7.

 

 

https://school.programmers.co.kr/learn/courses/30/lessons/72410

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

코드

 

import re

def solution(new_id):
    new_id = re.sub(r'[^a-z0-9_.-]', '', new_id.lower())
    new_id = re.sub(r'\.{2,}', '.', new_id).strip('.')
    new_id = "aaa" if not new_id else new_id[:15].rstrip('.')
    return new_id.ljust(3, new_id[-1])

 

 

정규표현식을 많이 사용하는 문제였습니다.

 

1. 소문자로 변환

 

str.lower() 사용

 

대문자의 경우 str.upper() 사용

 

 

2. 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 모든 문자 제거하기

 

new_id = re.sub(r'[^a-z0-9_.-]', '', new_id)

 

  • [^...]: 괄호 안의 문자 제외.
  • a-z: 알파벳 소문자.
  • 0-9: 숫자.
  • _.-: 밑줄, 마침표, 빼기.

 

3. 두 개 이상 연속된 마침표를 하나의 마침표(.)로 변경.

 

new_id = re.sub(r'\.{2,}', '.', new_id)

 

  • \.: 마침표 자체를 의미.
  • {2,}: 2번 이상 반복되는 패턴.

 

 

4. 마침표(.)가 처음이나 끝에 위치하면 제거

 

str.strip() 사용

 

str.strip()은

 

문자열의 양쪽 끝에 있는 특정 문자들을 제거하는 함수입니다.


기본적으로 공백 문자(띄어쓰기, 개행 문자 등)를 제거하지만, 인자를 지정하면 해당 문자를 제거할 수 있습니다

 

5, 6. 빈 문자열 처리 + 길이가 16자 이상일 경우 처리

 
new_id = 'a' if not new_id else new_id[:15].rstrip('.')

 

비어있으면 'a'로 아니면 어차피 길이는 15까지니까 자르고

 

마지막에 '.'가 오는지 확인해줍니다.

 

7. 마지막 문자를 길이가 3이 될 때까지 마지막 문자 추가

 

str.ljust() 사용

 

str.ljust(width, fillchar)는

 

문자열의 왼쪽을 기준으로 정렬하고,

 

지정한 너비(width)에 맞게 오른쪽에 채움 문자(fillchar)를 추가합니다.

 

 

기본 채움 문자는 공백(' ')입니다.

 

너비가 현재 문자열 길이보다 작거나 같으면 원본 문자열 그대로 반환됩니다.

 

 

 

 

 

다음에 또 봐요

 

728x90