Python/Programmers

Lv.1-신규 아이디 추천

JAEJUNG 2021. 7. 7. 00:55

문제

신규 가입자가 잘못된 아이디를 입력하면 아래 7가지 규칙에 따라 추천 아이디로 변환해줘야 한다.

1- new_id의 모든 대문자를 대응되는 소문자로 치환

2- new_id에서 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 모든 문자 제거

3- new_id에서 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환

4- new_id에서 마침표(.)가 처음이나 끝에 위치한다면 제거

5- new_id가 빈 문자열이라면, new_id에 "a"를 대입

6- new_id의 길이가 16자 이상이면, new_id의 첫 15개의 문자를 제외한 나머지 문자들 모두 제거 만약 제거 후 마침표(.) 가 new_id의 끝에 위치한다면 끝에 위치한 마침표(.) 문자를 제거

7- new_id의 길이가 2자 이하라면, new_id의 마지막 문자를 길이가 3이 될 때까지 반복해서 끝에 추가

 

내 코드

import re

def solution(new_id):
		#1
    st = new_id.lower()
		
		#2
    st = re.sub('[^a-z0-9-_.]', '', st)
	
		#3
    st = re.sub('(([.])\\2{1,})', '.', st)

		#4		
    if st[0] == '.':
        st = st.replace('.','', 1)
    if len(st)-1 > 0 and st[len(st)-1] == '.':
        st = st.rstrip('.')

		#5
    if st == "":
        st = st.replace("",'a')

		#6
    if len(st) > 15:
        if st[14] == '.':
            st=st[0:14]
        else:
            st=st[0:15]

		#7
    if len(st) < 3:
        tmp = st[len(st)-1]
        for i in range(3-len(st)):
            st += tmp

    return st

 

문제 풀이

  • lower() : 소문자로 치환
  • re.sub() : 정규화식으로 검색 후 치환
    • re.sub('[^a-z0-9-_.]', '', st) : a~z, 0~9, -, _, . 제외 모든 문자는 공백으로 치환
    • re.sub('(([.])\\\\2{1,})', '.', st) : '.'이 2번 이상 포함되면 '.'으로 치환
    • ({2,}면 3번 이상, {3,}면 4번 이상)
  • rstrip() : 오른쪽 문자 치환

 

고수 풀이

정규화는 필요할 때 찾아보면서 학습하자..

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

'Python > Programmers' 카테고리의 다른 글

Lv.1-음양 더하기  (0) 2021.07.07
Lv.1-소수 찾기  (0) 2021.07.07
Lv.1-K번째 숫자 꺼내기  (0) 2021.07.07
Lv.1-마라톤  (0) 2021.07.07
Lv.1-폰켓몬  (0) 2021.07.07