문제출처 : 프로그래머스
문제소개
신규아이디 추천
- 네오는 유저들이 규칙에 맞지 않는 아이디를 입력했을 때,
- 입력한 아이디와 유사하면서 규칙에 맞는 아이디를 추천해주는 프로그램을 개발해야 한다.
규칙)
- 아이디의 길이는 3자 ~ 15자
- 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.) 만 사용 가능
- 단, 마침표(.)는 처음과 끝에 사용할 수 없으며, 연속으로 사용 불가
- 빈문자열이 되면 a로 채우고, 길이가 부족하면 바로 앞문자 반복
- 길이가 넘어가면 뒤의 문자열은 제외
입력)
new_id = '...!@BaT#*..y.abcdefghijklm'
출력)
result = 'bat.y.abcdefghi'
코드
def solution(new_id):
answer = ''
new_id = new_id.lower()
for char in new_id:
if char.isalpha() or char.isdigit() or char in ['-', '_', '.']:
answer += char
while '..' in answer:
answer = answer.replace('..','.')
if answer[0] == '.':
answer = answer[1:] if len(answer) > 1 else '.'
if answer[-1] == '.':
answer = answer[:-1]
if answer == '':
answer = 'a'
if len(answer) > 15:
answer = answer[:15]
if answer[-1] == '.':
answer = answer[:-1]
while len(answer) < 3:
answer += answer[-1]
return answer
solution('...!@BaT#*..y.abcdefghijklm')
'bat.y.abcdefghi'
정규표현식 활용코드
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
solution('...!@BaT#*..y.abcdefghijklm')
'bat.y.abcdefghi'