알고리즘
[프로그래머스] 신규 아이디 추천
Dev...
2021. 5. 8. 15:03
programmers.co.kr/learn/courses/30/lessons/72410
코딩테스트 연습 - 신규 아이디 추천
카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로
programmers.co.kr
단계별로 나오는 설명대로 그대로 구현하면 되는 문제다.
정규표현식과 3단계 같은 경우 다른사람의 코드를 참고해 풀었다.
처음에는 3단계 부분도 정규표현식을 이용해 이렇게 작성했다.
regex = re.compile('[.]{2,}')
find = regex.findall(new_id)
if find: # 3단계
for i in find:
new_id = new_id.replace(i,'.')
.이 2개이상 나오는 것들을 찾아서 new_id에서 .으로 대체하도록 했는데 테스트케이스 20, 21이 통과가 되지 않았다..
while '..' in new_id: # 3단계
new_id = new_id.replace('..', '.')
while을 사용해 ..들을 모두 .으로 바꿔주니 해결되었다.
그리고 replace 함수 대신 re의 sub함수를 사용해도 된다.
re.sub('패턴', '바꿀문자열', '문자열', 바꿀횟수)
정답코드
import re
def solution(new_id):
new_id = new_id.lower() # 1단계
regex = re.compile('[^a-z0-9-_.]')
find = regex.findall(new_id)
if find: # 2단계
for i in find:
new_id = new_id.replace(i, '')
while '..' in new_id: # 3단계
new_id = new_id.replace('..', '.')
new_id = new_id.strip('.') # 4단계
if not new_id: # 5단계
new_id = new_id + 'a'
if len(new_id) >= 16: # 6단계
new_id = new_id[:15]
new_id = new_id.strip('.')
if len(new_id) <= 2: # 7단계
new_id = new_id + new_id[-1] * (3 - len(new_id))
return new_id