https://programmers.co.kr/learn/courses/30/lessons/72410?language=python3
내 소스
import re
def solution(new_id):
str_char = "abcdefghijklmnopqrstuvwxyz0123456789-_."
answer=new_id.lower()
answer = ''.join(x for x in answer if x in str_char)
answer = re.sub('(([.])\\2{1,})', '.', answer)
if answer[0] == '.':
answer=answer[1:]
if len(answer)==0:
answer='a'
else :
if answer[-1] == '.':
answer = answer[:-1]
if len(answer) > 15:
answer=answer[:15]
if answer[-1] == '.':
answer = answer[:-1]
if len(answer)<3:
for i in range (0,3-len(answer)):
answer+=answer[-1]
return answer
1단계부터 차례대로 조건대로 맞춰서 해주면 되는 간단한 문제였다.
좀 소스를 간단하게 만들 수 있던 포인트는
2단계 new_id에서 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 모든 문자를 제거합니다. 조건에서
str_char = "abcdefghijklmnopqrstuvwxyz0123456789-_."
answer = ''.join(x for x in answer if x in str_char)
다음과 같이 허용되는 문자열을 선언해준 후, 이중 for문 등을 이용하는 방법이 아닌 join 함수를 사용해서 해당되지 않은 문자는 제거하는 방법
3단계 new_id에서 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환합니다. 조건에서
import re
answer = re.sub('(([.])\\2{1,})', '.', answer)
re 라이브러리를 활용해서 sub 함수로 문자 '.' 가 2글자 이상 연속될 시 '.' 하나로 치환하는 방법
위 두 조건에서 소스를 줄인 것이 간단하게 만드는 포인트였던 것 같다.
그 아래 if 조건문들은 거의 조건 순서대로 직역(?) 해서 단순하게 만들었다!
특히 6단계 이후 마지막 문자가 '.' 인경우 다시 한 번 확인해서 제거해주는 부분은 위에서 사용된 동일한 소스가 한번 더 사용되기 때문에 좀 정리할 수도 있을 것 같다.
'개발 > Python' 카테고리의 다른 글
[Python 프로그래머스] JadenCase 문자열 만들기 - level2 [연습 문제] (1) | 2020.09.24 |
---|---|
[Python 프로그래머스] 전화번호 목록 - level2 [해시] (0) | 2020.09.24 |
[Python 프로그래머스] 주식가격 - level2 [스택/큐] (0) | 2020.09.24 |
[Python 프로그래머스] 올바른 괄호 - level2 (스킬 테스트) [연습 문제] (0) | 2020.09.24 |
[Python 프로그래머스] 2018 KAKAO BLIND RECRUITMENT - [1차] 다트 게임 (0) | 2020.09.01 |