2 분 소요

문제 링크

내 풀이

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문 돌리기

댓글남기기