[2021 KAKAO BLIND] 신규 아이디 추천 Python reOnlineJudge2021. 4. 12. 22:56
Table of Contents
반응형
문제 설명
re 라이브러리를 사용했습니다.
좌/우측 특정 문자 제거
좌/우측 특정 문자 또는 공백 제거엔 strip(), lstrip(), rstrip()을 사용합니다.
이번 문제에서는 .을 제거하는 것이므로 strip('.')과 같이 사용할 수 있었습니다.
치환 및 제거
정규표현식에 해당하는 문자들을 치환, 제거하기위해 re.sub 함수를 사용했습니다.
위 두 기능을 제외하고는 하드코딩으로 가능하기에 생략하겠습니다.
이번 문제를 풀면서 re 기능에 대해 숙지할 수 있었고, 정규 표현식을 응용할 수 있었습니다.
소스 코드
Python 최적화 전
import re
def solution(new_id):
#1단계 소문자 치환
new_id=new_id.lower()
#2단계 제거
lvl2 = re.compile('[0-9a-z_.\-]+')
new_id = lvl2.findall(new_id)
new_id = ''.join(new_id)
#3단계 . 압축
while '..' in new_id:
new_id = new_id.replace('..','.')
#4단계 양끝 . 제거
new_id = new_id.strip('.')
#5단계 빈문자열 a 추가
if new_id =='':new_id+='a'
#6단계 15개제외하고 문자모두제거
if len(new_id)>=16:
new_id = new_id[:15]
new_id = new_id.rstrip('.')#6단계 우측 . 제거
#7단계
if len(new_id)<=2:
idSize = len(new_id)
addchar = new_id[idSize-1:]
while len(new_id)<3:
new_id+=addchar
answer = new_id
return answer
Python 최적화 후
import re
def solution(new_id):
#1단계 & 2단계 소문자 치환, 제거
answer = re.sub('[^0-9a-z_.\-]+','',new_id.lower())
#3단계 . 2번 이상을 1개로 압축
answer = re.sub('\.\.+','.',answer)
#4단계 양끝 . 제거
answer = answer.strip('.')
#5단계 빈문자열 a 추가
if answer =='': answer='a'
#6단계 15개제외하고 문자모두제거, 우측 . 제거
answer = answer[:15].rstrip('.')
#7단계 길이 3 될 때까지 끝 문자 추가
answer+=answer[-1]*(3-len(answer))
return answer
반응형
'OnlineJudge' 카테고리의 다른 글
백준 16954 움직이는 미로 탈출 python (0) | 2021.04.20 |
---|---|
SWEA 1953 탈주범 검거 java 풀이 (0) | 2021.04.15 |
SWEA 5644 무선충전 Java, Python (0) | 2021.04.12 |
SWEA 1249 보급로 JAVA (0) | 2021.04.12 |
백준 6497 전력난 java (0) | 2021.03.27 |
@CODe_ :: 강승현입니다
인프런 지식공유자로 활동하고 있으며 MSA 전환이 취미입니다. 개발과 관련된 다양한 정보를 몰입감있게 전달합니다.