내 코드
def solution(new_id):
answer = ''
new_id = new_id.lower() # 1단계 - 소문자 치환
for i in new_id: # 2단계 - 특정 문자 제거
if i!='.' and i!='-' and i!='_' and ('a'>i or 'z'<i) and ('0'>i or '9'<i):
new_id = new_id.replace(i,"")
cnt=0
for i in new_id: # 3단계 - .제거
if i=='.':
if cnt==0:
cnt+=1
answer+=i
elif cnt==1:
continue
else:
answer+=i
cnt=0
if len(answer) > 0 and answer[-1] == '.': # 4단계 - .이 처음이나 끝에 위치하면 제거
answer = answer[:-1]
if len(answer) > 0 and answer[0]=='.':
answer = answer[1:]
if len(answer) ==0: # 5단계 - 빈 문자열이면 a 대입
answer+='a'
elif len(answer) >= 16: # 6단계 - 길이가 15이상이면 15까지 자르기, 제거 후 마지막이 . 이면 .제거
answer = answer[:15]
if answer[-1] =='.':
answer = answer[:-1]
if len(answer) <= 2: # 7단계 - 길이가 2 이하면 길이가 3이 될때까지 마지막 문자 반복
while len(answer) !=3:
answer+=answer[-1]
return answer
사용자가 아이디를 입력하였을때 다른 아이디를 추천해주는 알고리즘이다. if문이 엄청많다.. 딴사람들은 다른 방법으로 풀었겠지?ㅎ..
코드 해석은 어렵지 않을 것이다. 문제에서 바라는게 많아서 길어졌을뿐 ㅠ 코드에 주석을 달아놓겠다!!
다른사람 코드
import re
def solution(new_id):
st = new_id
st = st.lower()
st = re.sub('[^a-z0-9\-_.]', '', st)
st = re.sub('\.+', '.', st)
st = re.sub('^[.]|[.]$', '', st)
st = 'a' if len(st) == 0 else st[:15]
st = re.sub('^[.]|[.]$', '', st)
st = st if len(st) > 2 else st + "".join([st[-1] for i in range(3-len(st))])
return st
쩝.. 정규식,, 저번에 문제 풀때도 나왔었는데 귀찮아서 아직까지 정리 안하고있었다.. 또 나왔네,, 이젠 어쩔수없이 해야겠다 ^^..ㅎ.... 정규식은 정리 할게 많으니,. 이참에 파이썬 문법 정리 카테고리를 따로 만들어서 써야겠다 이때까지 다 밑에 썼는데.. 다신 안봐서...ㅋ... 카테고리를 따로 만들면 보겠지?ㅎㅎ.. 문법 정리하고 오고.. 다시 코드 분석해봐야겠다!
'코딩테스트 > Python' 카테고리의 다른 글
[코드업] 파이썬 기초 100제 1~10 (0) | 2021.08.05 |
---|---|
[프로그래머스] 로또의 최고 순위와 최저 순위 (0) | 2021.08.04 |
[프로그래머스] 약수의 개수와 덧셈 (0) | 2021.08.04 |
[프로그래머스] 소수 만들기 (0) | 2021.08.04 |
[프로그래머스] 숫자 문자열과 영단어 (0) | 2021.08.04 |