문제링크
from collections import deque
def solution(new_id):
# 1단계: 모든 대문자를 소문자로 치환
new_array = list(new_id.lower())
# 숫자목록
num_list = [str(i) for i in range(10)]
# 소문자 목록
char_list = [chr(i) for i in range(97, 123)]
# 특수문자 목록
str_list = ['-', '_', '.']
# 아이디 생성을 위한 queue 생성
check_list = deque()
# 주어진 아이디의 길이만큼
for i in range(len(new_array)):
# 2단계: 소문자, 숫자, 빼기, 밑줄, 마침표가 있을 때만
if new_array[i] in num_list or new_array[i] in char_list or new_array[i] in str_list:
# 새로운 아이디 queue에 추가
check_list.append(new_array[i])
# 3단계: 아이디의 마침표가 연속으로 있을 경우 제거
if len(check_list) > 1:
if check_list[-1] == '.' and check_list[-2] == '.':
check_list.pop()
# 4단계: 마침표가 처음이나 마지막에 위치한다면 제거
if check_list[0] == '.':
check_list.popleft()
elif check_list[-1] == '.':
check_list.pop()
# 5단계: 아이디가 빈 문자열이라면 a를 추가
if len(check_list) == 0:
check_list.append('a')
# 6단계 이후 검증을 위한 새로운 queue 생성
new_check_list = deque()
# 6단계: 아이디가 16자 이상이라면 15자까지만 새로운 queue에 추가
if len(check_list) >= 16:
for i in range(15):
new_check_list.append(check_list[i])
else:
for i in check_list:
new_check_list.append(i)
# 6단계: 아이디 문자열 제거 후 마침표가 마지막에 있다면 제거
if new_check_list[-1] == '.':
new_check_list.pop()
# 7단계: 아이디가 두 글자 이하일 경우 마지막 문자를 아이디가 3자리가 될 때 까지 추가
if len(new_check_list) <= 2:
cur_chr = new_check_list[-1]
for i in range(3 - len(new_check_list)):
new_check_list.append(cur_chr)
# 1 - 7단계까지 거친 queue를 하나의 문자로 합쳐서 return
return ''.join(new_check_list)