[Python] 프로그래머스 2021 KAKAO BLIND RECRUITMENT : 신규 아이디 추천

송진영·2022년 10월 22일
0

프로그래머스-python

목록 보기
21/22

프로그래머스 2021 KAKAO BLIND RECRUITMENT : 신규 아이디 추천

문제 풀이

사실 시키는 그대로 하면 되기 때문에 풀이랄 것도 없는 문제인 것 같다.

  1. lower() 함수를 이용해 소문자로 바꾼다.

  2. isalpha(), isdigit() 함수를 이용해 숫자와 알파벳이거나 '-' , '_' , '.' 인 문자들만 남겨준다.

  3. '.'일 경우 카운트 하고 아닐 경우 0으로 초기화 해서 카운트가 2 이상일 경우 빼준다.

  4. 양끝이 '.'일 경우 슬라이싱을 이용해 잘라준다.

  5. 빈 문자열이면 "aaa"로 만들어주는데 여기서 주의할 점은 '.'이어도 빈 문자열로 취급한다는 것이다.

  6. 문자열이 16자 이상일 경우 슬라이싱을 이용해 15자까지 잘라주고, 반복문을 통해 마지막 문자가 '.'이 아니게 될 때까지 잘라준다.

  7. 2자 이하일 경우(1자이거나 2자), (3 - 문자열 길이) * 문자[-1]을 문자에 더해준다.

def solution(new_id):
    answer = ''
    # 1번 소문자
    new_id = new_id.lower()
    special = ['-', '_', '.']
    # 2번 소문자, '-', '_', '.'을 제외한 문자 제거
    tmp = ""
    dot_cnt = 0
    
    for x in new_id:
        if x.isalpha() or x.isdigit() or x in special:
            # 3번 연속된 . 제거
            if x == '.':
                dot_cnt += 1
            else:
                dot_cnt = 0
            if dot_cnt < 2:
                tmp += x
    new_id = tmp
    # 5단계 빈 문자열이거나 '.'이어서 빈 문자열이 될 경우
    if len(new_id) == 0 or (len(new_id) == 1 and new_id == '.'):
        return "aaa"
    # 4단계 양끝 '.' 제거
    if new_id[0] == '.':
        new_id = new_id[1:]
    if new_id[-1] == '.':
        new_id = new_id[:len(new_id)-1]
    leng = len(new_id)
    # 7단계 2자 이하일 경우
    if leng < 3:
        new_id += new_id[-1] * (3-leng)
    # 6단계 16자 이상일 경우
    elif leng > 15:
        new_id = new_id[:15]
    for i in range(leng):
        if new_id[-1] == '.':
            new_id = new_id[:len(new_id)-1]
        else:
            break
    return new_id
profile
못하는 건 없다. 단지 그만큼 노력을 안 할 뿐이다.

0개의 댓글