https://programmers.co.kr/learn/courses/30/lessons/72410
복잡하지만 차근차근 1단계부터 7단계까지 구현해주었다.
다만 "3단계 new_id에서 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환합니다." 부분을 좀 억지로 구현해낸 것 같아서 더 나은 풀이를 참고해봐야겠다.
프로그래머스 더 나은 코드
def solution(new_id): answer = '' # 1 new_id = new_id.lower() # 2 for c in new_id: if c.isalpha() or c.isdigit() or c in ['-', '_', '.']: answer += c # 3 while '..' in answer: answer = answer.replace('..', '.') # 4 if answer[0] == '.': answer = answer[1:] if len(answer) > 1 else '.' if answer[-1] == '.': answer = answer[:-1] # 5 if answer == '': answer = 'a' # 6 if len(answer) > 15: answer = answer[:15] if answer[-1] == '.': answer = answer[:-1] # 7 while len(answer) < 3: answer += answer[-1] return answer
def solution(new_id):
step1=[]
for i in new_id:
if ord('A')<=ord(i)<=ord('Z'):
step1.append(chr(ord(i)+32))
else:
step1.append(i)
step2=[]
for i in step1:
if ord('a')<=ord(i)<=ord('z') or i.isdigit()==True or i=="-" or i=="_" or i==".":
step2.append(i)
step3="".join(step2)
for i in range(1000):
if step3.find("..")!=-1:
step3=step3.replace("..",".")
else:
break
step4=[]
for i in range(len(step3)):
if step3[i]!=".":
step4.append(step3[i])
elif step3[i]==".":
if i==0 or i==len(step3)-1:
continue
else:
step4.append(step3[i])
if len(step4)==0:
return("a"*3)
step5=step4
while len(step5)>=16:
step5.pop()
if step5[-1]==".":
step5.pop()
step6=step5
while len(step6)<=2:
step6.append(step6[-1])
step7="".join(step6)
return(step7)