프로그래머스 신규 아이디 추천 파이썬

안상철·2023년 5월 8일
0

문제링크

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)
profile
웹 개발자(FE / BE) anna입니다.

0개의 댓글