본문 바로가기
[PYTHON]

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

by b___gly 2022. 4. 23.

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

 

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

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

programmers.co.kr

 

내가 생각한 접근법

  • 당연히 for문과 if문 아니겠는가!!!!
  • re따위 생각이 아니라 알지도 못 했음
  • 근데 알아두면 편할 듯

 

풀이

import re

def solution(new_id):
	
    # 변수 짧게 써버리기
    st = new_id
    
    # 1단계. 소문자로 만들어버리기
    st = st.lower()
    
    # 2단계. 조건에 맞는 글자만 남겨버리기
    st = re.sub('[^a-z0-9\-_.]', '', st)
    
    # 3단계. .이 여러개인 거 한 개로 만들어버리기
    st = re.sub('\.+', '.', st)
    
    # 4단계. .이 맨 앞이나 맨 뒤면 없애버리기
    st = re.sub('^[.]|[.]$', '', st)
    
    # 5단계+6단계 반. 빈 문자열을 a로, 긴 글자 잘라버리기
    st = 'a' if len(st) == 0 else st[:15]
    
    # 6단계 나머지 반. 맨 뒤 글자 .이면 없애버리기
    st = re.sub('[.]$', '', st)
    
    # 7단계. 2글자 이하면 3글자 이상이 될 때까지 반복해버리기
    st = st if len(st) > 2 else st + "".join([st[-1] for i in range(3-len(st))])
    return st

 

정규식

  • re.sub(정규 표현식, 대상 문자열 , 치환 문자) : 치환 함수
    • 정규 표현식 - 검색 패턴을 지정
    • 대상 문자열 - 검색 대상이 되는 문자열
    • 치환 문자 - 변경하고 싶은 문자
  • st = re.sub('[^a-z0-9\-_.]', '', st) : [ ] 이 범위 밖에 있는 모든 문자를 공백으로 치환해라
    • '[^A-Z]+' : 대문자가 아닌 글자가 1글자 이상 있는지 확인
  • st = re.sub('\.+', '.', st) : .이 +(1개 이상인 거) '.'로 치환해라
    • st = re.sub('^[.]|[.]$','',st) : .으로 시작하거나 .으로 끝나면 공백으로 치환해라

  • st = 'a' if len(st) == 0 else st[:15] : len이 0이면 a로 채워넣어라, 아니면 16글자 이상이면 15자리까지만 써라
  • st = re.sub('[.]$', '', st) : 15글자로 자른 그 문자열의 끝이 .이라면 없애라
  • st = st if len(st) > 2 else st + "".join([st[-1] for i in range(3-len(st))]) : 3-len(st)까지 반복해라. st의 마지막 글자[-1]를 join해라 st에. 만약 len(st)가 2보다 크면 그냥 st 반환하고.

 

그 외

  • isalpha, isdigit : 알파벳인지, 숫자인지 확인하는 함수

댓글