https://programmers.co.kr/learn/courses/30/lessons/72410
"""
1. 아이디어
정규식과 구현능력을 테스트 하는 문제이므로 문제 조건에 맞춰 구현하면 된다.
2. 시간복잡도
O(1)
"""
import re
def solution(new_id):
# 1단계
new_id = new_id.lower()
# 2단계
new_id = re.sub("[^a-z\d\-\_\.]", "" , new_id)
""" 소문자(a-z), 숫자(\d), 빼기(\-), 밑줄(\-), 마침표(\.)를 제외한
(대괄호 [] 맨 앞에 ^를 붙여준다.) 모든 문자 제거 """
# 3단계
new_id = re.sub("\.\.+", ".", new_id)
# 4단계
if new_id[0] == '.':
if len(new_id) > 1:
new_id = new_id[1:]
if new_id[-1] == '.':
new_id = new_id[:-1]
# 5단계
if not new_id: # 빈 문자열이면
new_id += 'a'
# 6단계
if len(new_id) > 15:
new_id = new_id[:15]
if new_id[-1] == '.':
new_id = new_id[:-1]
# 7단계
if len(new_id) <= 2:
tmp_str = new_id[-1]
while len(new_id) != 3:
new_id += tmp_str
return new_id
"""
1. 아이디어
2. 시간복잡도
O(1)
"""
import re
def solution(new_id):
st = new_id
st = st.lower()
st = re.sub('[^a-z0-9\-_.]', '', st) # 와 이렇게 깔끔하게 쓸 수 있구나
st = re.sub('\.+', '.', st) # 이것도 배워가기..
st = re.sub('^[.]|[.]$', '', st) # $ 이게 마지막 문자열 가리키는거 같음.
st = 'a' if len(st) == 0 else st[:15] # 아는 문법인데 깔끔하게 썼네
st = re.sub('^[.]|[.]$', '', st)
st = st if len(st) > 2 else st + "".join([st[-1] for i in range(3-len(st))]) # 이거는 내가 한 방법이 직관적인 것 같다.
return st
다시 이 문제를 볼때는 정규식을 한번 공부할 필요가 있다.