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 : 알파벳인지, 숫자인지 확인하는 함수
'[PYTHON]' 카테고리의 다른 글
[프로그래머스]LV1. 키패드 누르기 (0) | 2022.04.23 |
---|---|
[프로그래머스]LV1. 숫자 문자열과 영단어 (0) | 2022.04.23 |
[프로그래머스]LV1. 로또의 최고 순위와 최저 순위 (0) | 2022.04.23 |
[인프런]예외처리 (0) | 2022.03.07 |
[인프런]퀴즈#7 (0) | 2022.02.27 |
댓글