신규 아이디 추천
📋 문제 정보
- 문제 출처: https://school.programmers.co.kr/learn/courses/30/lessons/72410
- 문제 유형: 문자열
- 소요 시간: 10분
문제 요약
주어진 7단계의 과정을 구현하기
🤔 아이디어
정규식을 사용하든 반복문과 조건문을 사용하든 구현만 하면 되는 문제다. 다만 문제를 푸는 과정에서 Python 정규식과 인덱스에 대한 내용이 헷갈려서 정리한다.
💭 생각 정리
Python에서 정규식
Java에서 정규식을 많이 다뤘기에 정규식을 생각하는 것은 별로 어렵지 않았다. 그러나 Pattern을 컴파일하고 사용해야하는 Java와 달리 Python에서는 패턴을 직접 리터럴로 사용할 수 있었다.
# 컴파일 후 사용
pattern = re.compile(r'[^a-z\d\-\_\.]')
new_id = re.sub(pattern, '', new_id)
# 리터럴 사용
new_id = re.sub('[^a-z\d\-\_\.]', '', new_id)
List index 정리
Python에서 마지막 원소에 접근하는 -1
인덱스는 원소가 없으면 런타임 에러가 발생한다.
""[-1] # out of index
그러나 슬라이싱의 경우 해당 인덱스가 존재하지 않더라도 가능한 범위까지 적용되고 런타임 에러는 발생하지 않는다.
"abcde"[:1000] # "abcde"
📄 소스 코드
import re
def solution(new_id):
# 1단계
new_id = new_id.lower()
# 2단계
new_id = re.sub('[^a-z\d\-\_\.]', '', new_id)
# 3단계
new_id = re.sub('\.+', '.', new_id)
# 4단계
new_id = re.sub('^\.|\.$', '', new_id)
# 5단계
if not new_id:
new_id = "a"
# 6단계
new_id = new_id[:15]
if new_id[-1] == ".":
new_id = new_id[:-1]
# 7단계
while len(new_id) <= 2:
new_id += new_id[-1]
return new_id