반응형
📝 TIL - 프로그래머스 신규 아이디 추천
📌 문제 요약
사용자로부터 입력된 아이디가 조건에 맞지 않을 경우, 주어진 규칙에 따라 새로운 아이디를 추천하는 문제입니다.
📚 학습 내용
- 정규표현식을 활용한 문자열 정제
- 조건문과 슬라이스를 활용한 문자열 길이 조정
- 문자열의 시작/끝에서 특정 문자 제거 (마침표)
- 로직을 함수로 분리하여 재사용성 및 가독성 향상
🔧 주요 로직 요약
- 모든 대문자를 소문자로 변환
- 허용되지 않은 문자 제거
- 연속된 마침표는 하나로 축약
- 시작/끝에 위치한 마침표 제거
- 빈 문자열이면 "a"로 대체
- 길이가 16자 이상이면 자르고, 끝이 마침표면 제거
- 길이가 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 |