[Programmers][Python]신규아이디 추천

MEIN_FIGUR·2021년 8월 20일
0

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

📌풀이


내가 쓴 풀이(성공)

  • lv1 : 모든 대문자를 소문자로 치환
  • lv2 : 알파벳 소문자, 숫자, 빼기, 밑줄, 마침표 제외하고 제거
  • lv3 : 마침표가 2번 이상 연속되면 하나로 바꿔줌
    • whilereplace 활용
  • lv4 : 마침표가 처음과 끝에 위치한다면 제거
    • strip 활용
  • lv5 : 빈 문자열이라면, 끝에 a 추가
  • lv6 : 16자 이상이라면, 15자 까지만 가져오고, 마지막이 마침표로 끝난다면 제거
  • lv7 : 길이가 2자 이하라면, 마지막 문자를 길이가 3이 될때까지 추가
def solution(new_id):
    answer = ''
    
    # level 1
    new_id = new_id.lower()
    
    # level 2
    for c in new_id:
        if c.isalpha() or c.isdigit() or c in '-_.' :
            answer += c

    # level 3
    while '..' in answer :
        answer = answer.replace('..','.')
        
    # level 4
    answer = answer.strip('.')
    
    # level 5
    if not answer :
        answer += 'a'
        
    # level 6
    if len(answer) > 15 :
        answer = answer[:15]
        answer = answer.strip('.')
        
    # level 7
    if len(answer) < 3 :
        while len(answer) < 3 :
            answer += answer[-1]
    
    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
profile
Growing Developer

0개의 댓글