프로그래머스 lv1 신규 아이디 출력 파이썬
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의 마지막 문자를 new_id의 길이가 3이 될 때까지 반복해서 끝에 붙입니다.
신규 유저가 입력한 아이디를 나타내는 new_id가 매개변수로 주어질 때, "네오"가 설계한 7단계의 처리 과정을 거친 후의 추천 아이디를 return 하도록 solution 함수를 완성해 주세요.
우선 처음엔 나도 for문과 if 문으로 runtime을 최대한 줄이면서 작성해나갔다.
통과는 했지만 맘에 안드는 와중 질문 칸을 통해 정규표현식의 존재를 알게 되었다.
그 후 기존 내 코드 + 정규표현식을 쓰는 법을 찾아서 처음부터 작성 했다.
import re
def solution(new_id):
answer = ''
answer = re.sub('[^a-z\d\_\-\.]','',new_id.lower())
answer = re.sub('\.\.+', '.', answer)
answer = re.sub('^\.', '', answer)
if answer == '':
answer = 'a'
answer = re.sub('\.$','', answer[:15])
if len(answer) < 3:
return answer.ljust(3, answer[-1])
return answer
나는 개인적으로 마지막의 .
을 지우는건 [:15]
로 자른 후, 한번만 해도 된다고 판단했다.(\.$
)
그래서 시작하는 .
만 삭제하고 (^\.
)
이번에 배운 정규 표현식 설명은 따로 파이썬 함수 정리에다가 따로 정리해둘 예정...
.lower()
을 사용해서 소문자로 바꾸고,
위키백과 정규표현식 을 참고를 많이 했는데 (가장 이론적으로 정리 많이 되어있어서 추천드립니다...) [^]
을 사용하면 not
의 의미가 되고, ^
을 사용하면 시작이 되더라...
그리고 길이가 3
보다 작은 경우에는,
파이썬 ljust()
를 사용해보고 싶어서 3
만큼의 길이를 answer[-1]
로 채우게 코드를 짰고, 이 경우는 바로 return
해줬다
보니 맞는지는 모르겠지만 이 문제에 정규표현식을 쓴다는 생각 자체를
(맞는지는 모르겠으나)
프로그래머스 Backkom님이 먼저 하신것 같은데 진짜.... 천재십니다...👏👏
정규표현식 정체 자체를 오늘 처음 알아서 당황스럽지만...
쓸 수 있는 함수를 더 알게 되는 것 같아서 한편으론 기분 좋네요
다들 즐 코딩입니당~!~!!