Algorithm/1일 1코테
[🥰프로그래머스] 신규 아이디 추천 (2021 KAKAO BLIND RECRUITMENT)
대인보우
2022. 2. 4. 09:28
반응형
신규 아이디 추천
https://programmers.co.kr/learn/courses/30/lessons/72410
내 풀이
import re
def solution(new_id):
new_id = new_id.lower() # 소문자 변경
new_id = re.sub(r'[^a-z0-9-_.]', '', new_id) # 특정 특문, 영어, 숫자외 제거
new_id_list = list(new_id) # 리스트로 변경
for i in range(len(new_id_list)-1): # i와 i+1이 같을 경우 i번째는 공백으로 변경
if new_id_list[i] == '.' and new_id_list[i] == new_id_list[i+1]:
new_id_list[i] = ''
new_id = ''.join(new_id_list) # 다시 string으로 변경
if new_id.startswith('.'): # . 으로 시작하면
new_id = new_id[1:] # 삭제
if new_id.endswith('.'): # . 으로 끝나면
new_id = new_id[:-1] # 삭제
if len(new_id) == 0: # 길이가 0일 경우 a
new_id = 'a'
if len(new_id) >= 16: # 16보다 길거나 같으면
new_id = new_id[:15] # 자름
if new_id.endswith('.'): # 잘랐는데 . 으로 끝나면 없애줌
new_id = new_id[:-1]
if len(new_id) <= 2: # 2보다 길면
new_id = new_id + (3-len(new_id))*new_id[-1] # 마지막 숫자로 3 채워줌
return new_id
다른 사람 풀이
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
^ -> 문자열의 시작이나 not을 의미한다
$ -> 문자열의 끝을 의미한다.
+ -> 어떤 문자가 1회 이상 반복
{n} -> n회 이상 반복
반응형