개발/PS

프로그래머스 Lv1 신규 아이디 추천 (파이썬)

유훈 | Yuhun 2021. 12. 30. 16:24
반응형

풀이

def solution(new_id):
    answer = ''
    # 1
    answer = new_id.lower()
    temp = ''
    # 2
    for i in answer:
        if i.isdigit() or i.isalpha() or i == '-' or i == '_' or i == '.':
            temp = temp + i
        else:
            pass
    answer = temp
    # 3
    answer = answer.replace('..', '.')
    # 4
    while True:
        if len(answer) > 0:
            if answer[0] == '.':
                answer = answer[1:]
            elif answer[-1] == '.':
                answer = answer[:-1]
            else:
                break
        else:
            break
    # 5
    if answer == '':
        answer = 'a'
    # 6
    if len(answer) >= 16:
        answer = answer[0:15]
    while True:
        if answer[-1] == '.':
            answer = answer[0:-1]
        else:
            break
    # 7
    while True:
        if len(answer) <= 2:
            answer = answer + answer[-1]
        else:
            break

    return answer


print(solution('...!@BaT#*..y.abcdefghijklm'))
print(solution('z-+.^.'))
print(solution(	"=.="))
print(solution("123_.def"))
print(solution("abcdefghijklmn.p"))

저는 1단계 푼 것 중에서 이게 가장 어려웠던 것 같아요.

사실 다른 조건은 그래도 할만한데 저는 2번 조건이 가장 어려웠어요.

어떻게 구분지을까 검색하다가 is*()함수들이 종류가 엄청 많더라구요. 그 중 두가지를 이용했어요.

 

#1 . lower()로 소문자로 바꾸기

#2. isalpha(), isdigit()와 다른 조건을 or로 연결해 사용

#3. replace() 사용

=> replace()는 자주 사용되고 편리하니 알아두시면 좋을것 같아요!

#4. 앞 뒤를 체크하고 [ : ]를 이용해 slicing해주었어요.

#5. 빈 문자열 체크!

#6. 길이 제한과 마지막 문자열 체크

#7. 너무 짧은지 체크하고 늘려주기

 

반응형