11/2 신규 아이디 추천
https://school.programmers.co.kr/learn/courses/30/lessons/72410
나는 문제를 따라서 언어 그대로 코드를 작성했다..
def solution(new_id):
# 1. 소문자 치환
answer = new_id.lower()
tmp_answer = ""
for chr in answer :
# 2. 알파벳 소문자, 숫자, -, _, .를 제외한 모든 문자 제거
if chr.islower() or chr.isdigit() or chr == '-' or chr == '_' or chr == '.' :
tmp_answer = tmp_answer + chr
answer = tmp_answer
# 3. 연속된 마침표를 하나로 대체
while '..' in answer :
answer = answer.replace('..', '.')
# 4. 마침표가 처음이나 끝에 있으면 제거
if len(answer) > 0 and answer[0] == '.' :
answer = answer[1 :]
if len(answer) > 0 and answer[-1] == '.' :
answer = answer[0 : -1]
# 5. 빈 문자열 => 'a' 대입
if len(answer) == 0 :
answer = 'a'
# 6. 길이가 16 이상이면 첫 15개의 문자만 남김
if len(answer) >= 16 :
answer = answer[ : 15]
# 마침표가 끝에 있다면 마침표 제거
if answer[-1] == '.' :
answer = answer[0 : -1]
# 7. 길이가 2자 이하라면 길이가 3이 될때까지 마지막 문자를 붙인다.
if len(answer) <= 2 :
end = answer[-1]
while len(answer) != 3 :
answer = answer + end
return answer
다른 사람의 풀이
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
댓글남기기