Python/algorithm

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

baecode 2025. 4. 21. 22:24
반응형
TIL - 프로그래머스 신규 아이디 추천

📝 TIL - 프로그래머스 신규 아이디 추천

📌 문제 요약

사용자로부터 입력된 아이디가 조건에 맞지 않을 경우, 주어진 규칙에 따라 새로운 아이디를 추천하는 문제입니다.

📚 학습 내용

  1. 정규표현식을 활용한 문자열 정제
  2. 조건문과 슬라이스를 활용한 문자열 길이 조정
  3. 문자열의 시작/끝에서 특정 문자 제거 (마침표)
  4. 로직을 함수로 분리하여 재사용성 및 가독성 향상

🔧 주요 로직 요약

  1. 모든 대문자를 소문자로 변환
  2. 허용되지 않은 문자 제거
  3. 연속된 마침표는 하나로 축약
  4. 시작/끝에 위치한 마침표 제거
  5. 빈 문자열이면 "a"로 대체
  6. 길이가 16자 이상이면 자르고, 끝이 마침표면 제거
  7. 길이가 2자 이하이면 마지막 문자를 반복하여 길이 3으로 맞춤

💡 배운 점

  • re.sub()을 활용하면 특정 패턴을 쉽게 치환할 수 있음
  • 조건문에서 파라미터를 활용한 유틸성 함수 작성은 재사용과 유지보수에 유리함
  • 입력 조건이 많은 경우에는 단계별 로직을 명확히 나누어 구현하는 것이 중요

✅ 최종 코드


import re

def delete_dot(s: str, start: bool, end: bool):
    if s == ".":
        return ''
    if start:
        s = re.sub(r"^\.+", "", s)
    if end:
        s = re.sub(r"\.+$", "", s)
    return s

def solution(new_id):
    answer = new_id.lower()
    answer = re.sub(r"[^a-z0-9\-_.]", "", answer)
    answer = re.sub(r"\.+", ".", answer)
    answer = delete_dot(s=answer, start=True, end=True)
    answer = 'a' if not answer else answer
    answer = answer[:15] if len(answer) >= 16 else answer
    answer = delete_dot(s=answer, start=False, end=True)
    if len(answer) <= 2:
        answer += answer[-1] * (3 - len(answer))
    return answer
  

🔗 참고 링크

반응형

'Python > algorithm' 카테고리의 다른 글

[Leetcode] two-sum  (0) 2025.09.09
김밥천국의 계단  (0) 2025.04.24
N초 동안 가능한 스킬 조합 수 구하기  (0) 2025.04.20
JadenCase 문자열 처리[프로그래머스]  (0) 2025.04.16
과자 나눠주기 [백준]  (0) 2025.04.14