본문 바로가기

알고리즘

프로그래머스)신규 아이디 추천-python

https://school.programmers.co.kr/learn/courses/30/lessons/72410?language=python3 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

위에 주어진 조건을 반복하며 문자열을 리턴하는 문제이다.

 

def solution(new_id):
    answer = ''
#     소문자
    answer = new_id.lower()
    
#     특수문자 제거
    a = ''
    for i in answer:
        if i.isalnum() or i in ['-','_','.']:
            a += i
            
#     점 중복 제거    
    b = ''
    for i in range(len(a)):
        if i == 0:
            b += a[i]
        elif a[i] == '.':
            if a[i] != b[-1]:
                b += a[i]
        else:
            b += a[i]  
    
#     첫번째와 마지막 . 제거
    if len(b) > 0 and b[0] == '.':
        b = b[1:]
    if len(b) > 0 and b[-1] == '.':
        b = b[:-1]

#         비어잇으면 'a'삽입
    if b == '':
        b = 'aaa'
    
# 16자 이상이면
    if len(b) >= 16:
        b = b[0:15]
        while b[-1] == '.':
            b = b[:-1]
# 2자 이하라면
    if len(b) < 3:
        leng = 3 - len(b)
        b = b + b[-1] * leng
    
    return b

개인적으로 문제는 쉬웠다.

제한시간도 넉넉해서 별다른 생각없이 풀 수 있었지만 코드가 좀 더러워졌다.

def change_new_id(new_id):
    new_id = new_id.lower()
    new_id = "".join(c for c in new_id if c.isalnum() or c in ['_', '-', '.'])
    new_id = "".join([new_id[i] for i in range(len(new_id)) if i == 0 or new_id[i] != '.' or new_id[i - 1] != '.'])
    if len(new_id) > 0 and new_id[0] == '.':
        new_id = new_id[1:]
    if len(new_id) > 0 and new_id[-1] == '.':
        new_id = new_id[:-1]
    if len(new_id) == 0:
        new_id = "a"
    if len(new_id) >= 16:
        new_id = new_id[:15]
        if new_id[-1] == '.':
            new_id = new_id[:-1]
    while len(new_id) <= 2:
        new_id += new_id[-1]
    return new_id

깔끔하게 가지치기한 코드이다.