
대문자로 바꿔주는 걸 ord()와 chr()를 활용해 해결했다. 파이썬의 string method인 string.upper를 사용해도 된다.
알파벳 소문자와 숫자, -, _가 오는 경우만 answer에 더해준다, .은 3단계에서 해결한다.
.이 나오는 경우 answer에 더해주고, answer의 마지막에 .이 있는 경우는 더하지 않는다.
처음이나 끝에 .을 제거하기 위해 strip('.') 메서드를 활용하여 .을 제거한다.
strip()은 양쪽에 특정 문자가 나오지 않을 때까지 제거할 수 있다. strip()에 아무것도 넣지 않은 경우는 공백을 제거한다.
빈 문자열인 경우는 a를 넣어준다.
길이가 15보다 크면 나머지를 자른다. 그리고 오른쪽에 .을 제거하기 위해 rstrip('.')을 활용한다.
길이가 2자 이하이면, 남은 길이만큼 마지막 글자를 곱해서 더해준다.
def solution(new_id):
answer = ''
for c in new_id:
if 'A' <= c <= 'Z': # 대문자를 소문자로 변경
answer += chr(ord(c) + 32)
elif 'a' <= c <= 'z' or '0' <= c <= '9' or c in '-_':
answer += c
if answer and c == '.' and answer[-1] != '.': # .이 나온 경우
answer += c
answer = answer.strip('.') # 처음이나 끝에 .이 있으면 제거
if len(answer) > 15: # 길이가 15보다 크면 잘라주고 양쪽으로 .을 지워준다.
answer = answer[:15]
answer = answer.rstrip('.')
if not answer: # 아무 것도 없으면 a를 넣어준다.
answer = 'a'
if len(answer) <= 2:
answer += (3 - len(answer)) * answer[-1]
return answer