프로그래머스

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

띵지니어 2022. 2. 13. 23:26
반응형

https://programmers.co.kr/learn/courses/30/lessons/72410

 

코딩테스트 연습 - 신규 아이디 추천

카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로

programmers.co.kr

2021 KAKAO BLIND RECRUITMENT

 

내 답안

def solution(new_id):
    temp = ''
    answer = ''
    
    # 1
    new_id = new_id.lower()
    
    # 2
    for i in new_id:
        if i not in '~!@#$%^&*()=+[{]}:?,<>/':
            temp += i
    new_id = temp
    
    temp = ''
    
    # 3
    if len(new_id) == 0:
        return 'aaa'
    else:
        cnt = 0
        for i in new_id:
            if i == '.':
                cnt += 1
                if cnt < 2:
                    temp += i
            else:
                temp += i
                cnt = 0
                
    # 4    
        new_id = list(temp)
        temp = ''
        
        if new_id[0] == '.':
            if len(new_id) >= 2:
                new_id = new_id[1:]
            else:
                new_id = '.'
        
        if new_id[-1] == '.':
            new_id = new_id[:-1]
                
    temp = list(new_id)
    
    # 5
    if len(temp) == 0:
        return 'aaa'
    
    # 6
    while len(temp) >= 16:
        temp.pop()
    if temp[-1] == '.':
        temp.pop()        
    while(temp[-1] == '.'):
        temp.pop()
        
    new_id = list(temp)
    
    # 7
    while(len(new_id) <= 2):
        new_id.append(new_id[-1])
        
    for i in new_id:
        answer += i
        
    return answer

난 그냥 조건에 있는 그대로 코드를 짰는데 상당히 길게 나왔다.

 

아래는 대표 문제 풀이이다.

정규식을 이용해서 풀었다는데 나는 정규식 공부를 안해서 모르겠다..

 

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

 

이것도 대표 문풀 인데, 정말 깔끔해서 퍼 왔다.

def solution(new_id):
    answer = ''
    # 1
    new_id = new_id.lower()
    # 2
    for c in new_id:
        if c.isalpha() or c.isdigit() or c in ['-', '_', '.']:
            answer += c
    # 3
    while '..' in answer:
        answer = answer.replace('..', '.')
    # 4
    if answer[0] == '.':
        answer = answer[1:] if len(answer) > 1 else '.'
    if answer[-1] == '.':
        answer = answer[:-1]
    # 5
    if answer == '':
        answer = 'a'
    # 6
    if len(answer) > 15:
        answer = answer[:15]
        if answer[-1] == '.':
            answer = answer[:-1]
    # 7
    while len(answer) < 3:
        answer += answer[-1]
    return answer

 

특히 # 3 이 정말 인상 깊었던 것 같다.

.

.

나는 정말 풀려고만 코드를 작성했지만

이 코드를 작성한 사람은 정말 파이썬에 대한 이해도 높고, 확실히 나보다 머리가 많이 좋은 것 같다 느꼈다.

많이 노력해야겠다,,

반응형
목차(index)