사실 시키는 그대로 하면 되기 때문에 풀이랄 것도 없는 문제인 것 같다.
lower() 함수를 이용해 소문자로 바꾼다.
isalpha(), isdigit() 함수를 이용해 숫자와 알파벳이거나 '-' , '_' , '.' 인 문자들만 남겨준다.
'.'일 경우 카운트 하고 아닐 경우 0으로 초기화 해서 카운트가 2 이상일 경우 빼준다.
양끝이 '.'일 경우 슬라이싱을 이용해 잘라준다.
빈 문자열이면 "aaa"로 만들어주는데 여기서 주의할 점은 '.'이어도 빈 문자열로 취급한다는 것이다.
문자열이 16자 이상일 경우 슬라이싱을 이용해 15자까지 잘라주고, 반복문을 통해 마지막 문자가 '.'이 아니게 될 때까지 잘라준다.
2자 이하일 경우(1자이거나 2자), (3 - 문자열 길이) * 문자[-1]을 문자에 더해준다.
def solution(new_id):
answer = ''
# 1번 소문자
new_id = new_id.lower()
special = ['-', '_', '.']
# 2번 소문자, '-', '_', '.'을 제외한 문자 제거
tmp = ""
dot_cnt = 0
for x in new_id:
if x.isalpha() or x.isdigit() or x in special:
# 3번 연속된 . 제거
if x == '.':
dot_cnt += 1
else:
dot_cnt = 0
if dot_cnt < 2:
tmp += x
new_id = tmp
# 5단계 빈 문자열이거나 '.'이어서 빈 문자열이 될 경우
if len(new_id) == 0 or (len(new_id) == 1 and new_id == '.'):
return "aaa"
# 4단계 양끝 '.' 제거
if new_id[0] == '.':
new_id = new_id[1:]
if new_id[-1] == '.':
new_id = new_id[:len(new_id)-1]
leng = len(new_id)
# 7단계 2자 이하일 경우
if leng < 3:
new_id += new_id[-1] * (3-leng)
# 6단계 16자 이상일 경우
elif leng > 15:
new_id = new_id[:15]
for i in range(leng):
if new_id[-1] == '.':
new_id = new_id[:len(new_id)-1]
else:
break
return new_id