나의 풀이
def solution(new_id):
answer = ''
#1단계 알파벳을 소문자로 변경한다. 알파벳이외의 문자는 자동적으로 무시된다.
new_id=new_id.lower()
#2단계 소문자, 숫자, 빽, 밑줄, 마침표를 제외한 모든 문자를 공백(제거)으로 대체
for i in new_id:
if i.isalpha() or i.isdigit() or i in ['-', '_', '.']:
answer+=i
#3단계 마침표가 중복된다면 이를 제거한다.
#".."이 존재하는 동안만!
while ".." in answer:
answer =answer.replace("..", ".")
#4단계 마침표가 처음이나 끝에 위치한다면 제거 합니다.
if answer and answer[0]=='.':
answer=answer[1:]
if answer and answer[-1]=='.':
answer=answer[:len(answer)-1:]
#5단계 빈 문자열이라면 new_id에 "a"를 대입합니다.
if answer =="":
answer='a'
#6-1단계 : 길이가 16자 이상인 경우
if len(answer)>=16:
answer=answer[:15]
#6-2단계: 문자열이 마침표로 끝나는 경우
if answer[-1]=='.':
answer=answer[ :len(answer)-1:]
#7단계 문자열의 길이가 2이하인 경우 문자열의 길이가 3이 될때까지 마지막 문자열을 합니다.
if len(answer)<=2:
while(len(answer)<3):
answer+=answer[-1]
return answer
다른 사람의 풀이
import re
def solution(new_id):
answer = ''
#1단계 알파벳을 소문자로 변경한다. 알파벳이외의 문자는 자동적으로 무시된다.
new_id=new_id.lower()
#2단계 소문자, 숫자, 빽, 밑줄, 마침표를 제외한 모든 문자를 공백(제거)으로 대체
answer =re.sub('[^a-z0-9\-_.]', '', new_id)
#3단계 마침표가 1개 이상인 경우 .으로 대체한다.
answer = re.sub('\.+', '.', answer)
#4단계 마침표로 시작하거나 끝나는 경우 .를 제거한다.
answer = re.sub('^[.]|[.]$', '', answer)
#5단게 빈 문자열이라면 new_id에 "a"를 대입합니다.
if answer =="":
answer='a'
#6-1단계 : 길이가 16자 이상인 경우
if len(answer)>=16:
answer=answer[:15]
#6-2단계 마침표로 .으로 끝나는 경우 .를 제거한다.
answer = re.sub('^[.]|[.]$', '', answer)
#7단계: 문자열의 길이가 2이하인 경우 문자열이 길이가 3이 되기 전까지 마지막문자를 더한다.
if len(answer)<=2:
while(len(answer)<3):
answer+=answer[-1]
return answer
▶ [ ]는 or을 의미한다. 즉 대괄호 안의 모든 문자
▶[^ ]: 대괄호 안에 있는 ^은 not을 의미한다.
따라서 대괄호 안의 문자를 제외한 모든 문자를 의미한다.
특수문자를 사용할때는 \를 쓴다.
▶^[ ] : 대괄호 밖의 ^는 시작하는 문자열을 의미한다. 대괄호 안의 문자로 시작하는 문자열
▶[ ]$: : 대괄호 안의 문자로 끝나는 문자열
▶ + : 1개 이상의 문자
'프로그래머스(파이썬) > LV.1(파이썬)' 카테고리의 다른 글
기사단원의 무기→약수를 구하는 효율적인 알고리즘★★ (0) | 2022.12.22 |
---|---|
명예의 전당→킹 받네!! 열 받네!! + del vs remove() (0) | 2022.12.21 |
크레인 인형 뽑기 →"열"접근★★ + 전부 1씩 빼주기(람다식)★★ (0) | 2022.12.21 |
폰켓몬★★ → 해설, 조합X (0) | 2022.12.21 |
키패드 누르기→매개변수로 값주기, 현재값, next값★ (0) | 2022.12.20 |