문제 링크
내 풀이
def solution(new_id):
approve = 'abcdefghijklmnopqrstuvwxyz-_.1234567890'
# 1단계
change_id = new_id.lower()
# 2단계
for word in change_id:
if word not in approve:
change_id = change_id.replace(word,'')
# 3단계
while '..' in change_id:
change_id = change_id.replace('..','.')
# 4단계
if change_id:
if change_id[0] == ".":
change_id = list(change_id)
change_id.pop(0)
change_id = ''.join(change_id)
if change_id:
if change_id[-1] == '.':
change_id = list(change_id)
change_id.pop()
change_id = ''.join(change_id)
# 5단계
if len(change_id) == 0:
change_id = 'a'
# 6단계
if len(change_id) >= 16:
change_id = change_id[0:15]
if change_id[-1] == '.':
change_id = list(change_id)
change_id.pop()
change_id = ''.join(change_id)
# 7단계
if len(change_id) <= 2:
while len(change_id) != 3:
change_id += change_id[-1]
return change_id
다른 풀이
def solution(new_id):
# 1단계
# lower()을 통해 new_id의 대문자를 소문자로 바꾸어준다.
new_id = new_id.lower()
# 2단계
temp = '' # 임시 값
for i in new_id:
# 소문자, 숫자, "-", "_", "." 만 temp에 넣기
if i.isalpha() or i.isdigit() or i == "-" or i == "_" or i == ".":
temp += i
# temp를 다시 new_id에 넣기
new_id = temp
# 3단계
# ".."가 new_id 안에 있으면 "."로 치환하기
while ".." in new_id:
new_id = new_id.replace("..", ".")
# 4단계
# new_id의 처음이나 끝에 "." 있을 경우 슬라이싱해서 빼버리기
while new_id.startswith(".") or new_id.endswith("."):
if new_id.startswith("."):
new_id = new_id[1:]
if new_id.endswith("."):
new_id = new_id[:-1]
# 5단계
# new_id가 빈 문자열인 경우 "a" 추가
if new_id == "":
new_id += "a"
# 6단계
# new_id의 길이가 16이상이면 슬라이싱 하기
# 슬라이싱 한 후 끝에 "."있으면 제거하기
# 3단계에서 "."가 연속으로 있는 경우는 제거해서 반복문은 불필요
if len(new_id) >= 16:
new_id = new_id[:15]
if new_id.endswith("."):
new_id = new_id[:-1]
# 7단계
# new_id의 길이가 2 이하("이하"는 "~보다 작거나 같다"라는 뜻)면
# new_id의 길이가 3이 될 때까지 new_id의 끝 문자 추가 반복하기
while len(new_id) < 3:
new_id = new_id + new_id[-1]
return new_id
출처: https://1ets-just-do-it.tistory.com/59 [파이썬은 신이야🔥🔥🔥:티스토리]
배울 점
- startswith(“.”), endswith(“.”)의 함수 이용
- new_id = new_id[1:] 슬라이싱을 통한 제거
- 4단계를 while문을 통해 앞과 뒤에 ‘.’이 없어질 때까지 while문 돌리기
댓글남기기