본문 바로가기

코딩테스트/Python

[프로그래머스] 신규 아이디 추천

내 코드

def solution(new_id):
    answer = ''
    
    new_id = new_id.lower() # 1단계 - 소문자 치환
    
    for i in new_id: # 2단계 - 특정 문자 제거
        if i!='.' and i!='-' and i!='_' and ('a'>i or 'z'<i) and ('0'>i or '9'<i):
            new_id = new_id.replace(i,"") 
    cnt=0
    for i in new_id: # 3단계 - .제거
        if i=='.':
            if cnt==0:
                cnt+=1
                answer+=i
            elif cnt==1:
                continue
        else:
            answer+=i
            cnt=0
    
    if len(answer) > 0 and answer[-1] == '.': # 4단계 - .이 처음이나 끝에 위치하면 제거
        answer = answer[:-1]
    if len(answer) > 0 and answer[0]=='.':
        answer = answer[1:]
    
    if len(answer) ==0: # 5단계 - 빈 문자열이면 a 대입
        answer+='a'
    elif len(answer) >= 16: # 6단계 - 길이가 15이상이면 15까지 자르기, 제거 후 마지막이 . 이면 .제거
        answer = answer[:15]
        if answer[-1] =='.':
            answer = answer[:-1] 
    if len(answer) <= 2: # 7단계 - 길이가 2 이하면 길이가 3이 될때까지 마지막 문자 반복
        while len(answer) !=3:
            answer+=answer[-1]
    
        
    return answer

사용자가 아이디를 입력하였을때 다른 아이디를 추천해주는 알고리즘이다. if문이 엄청많다.. 딴사람들은 다른 방법으로 풀었겠지?ㅎ.. 

코드 해석은 어렵지 않을 것이다. 문제에서 바라는게 많아서 길어졌을뿐 ㅠ 코드에 주석을 달아놓겠다!!

 

다른사람 코드

import re

def solution(new_id):
    st = new_id
    st = st.lower()
    st = re.sub('[^a-z0-9\-_.]', '', st)
    st = re.sub('\.+', '.', st)
    st = re.sub('^[.]|[.]$', '', st)
    st = 'a' if len(st) == 0 else st[:15]
    st = re.sub('^[.]|[.]$', '', st)
    st = st if len(st) > 2 else st + "".join([st[-1] for i in range(3-len(st))])
    return st

쩝.. 정규식,, 저번에 문제 풀때도 나왔었는데 귀찮아서 아직까지 정리 안하고있었다.. 또 나왔네,, 이젠 어쩔수없이 해야겠다 ^^..ㅎ.... 정규식은 정리 할게 많으니,. 이참에 파이썬 문법 정리 카테고리를 따로 만들어서 써야겠다 이때까지 다 밑에 썼는데.. 다신 안봐서...ㅋ... 카테고리를 따로 만들면 보겠지?ㅎㅎ.. 문법 정리하고 오고.. 다시 코드 분석해봐야겠다!