본문 바로가기
알고리즘/프로그래머스 PS

[프로그래머스][Level 1][Python] 신규 아이디 추천

by 빛밤하늘 2021. 7. 15.
반응형

밑의 링크는 프로그래머스에서의 문제 링크입니다.

 

코딩테스트 연습 - 신규 아이디 추천

카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로

programmers.co.kr

 

 

 

 

 

 

 

 

파이썬 코드와 결과입니다.

# 카카오 아이디 규칙에 맞지 않는 신규 유저의 아이디가 매개변수로 주어집니다.
def solution(new_id):
    # 추천하는 새 아이디에 쓰이지 않는 특수문자들을 저장한 변수를 선언합니다.
    special_char = '~!@#$%^&*()=+[{]}:?,<>/'

    # 1단계 규칙을 구현합니다.
    # 모든 대문자를 대응되는 소문자로 치환합니다.
    new_id = new_id.lower()

    # 2단계 규칙을 구현합니다.
    # 임시로 사용될 빈 문자열 변수를 선언합니다.
    temp = ''
    # new_id에서 한 문자씩 반복해봅니다.
    for char in new_id:
        # 현재 문자가 special_char에 속하지 않는다면
        # 즉, 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 문자라면
        if char not in special_char:
            # 임시 변수 temp에 현재 문자를 넣어줍니다.
            temp += char

    # 3단계 규칙을 구현합니다.
    # new_id에 temp의 첫 문자를 저장합니다.
    new_id = temp[0]
    # temp의 두 번째 문자부터 반복해봅니다.
    for char in temp[1:]:
        # new_id의 마지막 문자와 temp에서 반복 중인 현재 문자 모두 마침표(.)라면
        if new_id[-1] == '.' and char == '.':
            # 그냥 넘어갑니다.
            continue
        # 그 외의 경우라면
        else:
            # new_id에 현재 문자를 넣어줍니다.
            new_id += char

    # 4단계 규칙을 구현합니다.
    # new_id에서 마침표(.)가 처음이나 끝에 위치한다면 제거합니다.
    new_id = new_id.strip('.')

    # 5단계 규칙을 구현합니다.
    # new_id가 빈 문자열이라면
    if new_id == '':
        # new_id에 "a"를 대입합니다.
        new_id = 'a'

    # 6단계 규칙을 구현합니다.
    # new_id의 길이가 16자 이상이라면
    if len(new_id) >= 16:
        # new_id의 첫 15개의 문자를 제외한 나머지 문자들을 모두 제거합니다.
        new_id = new_id[:15]

        # 제거 후 마침표(.)가 new_id 끝에 위치한다면
        if new_id[-1] == '.':
            # 끝에 위치한 마침표(.) 문자를 제거합니다.
            new_id = new_id[:-1]

    # 7단계 규칙을 구현합니다.
    # new_id의 길이가 2자 이하라면
    if len(new_id) <= 2:
        # new_id의 마지막 문자를 저장한 변수를 선언합니다.
        last_char = new_id[-1]
        # new_id의 마지막 문자를 길이가 3이 될 때까지 반복해서 끝에 붙입니다.
        new_id += last_char * (3 - len(new_id))

    # 위의 7단계를 거친 new_id의 값을 반환합니다.
    return new_id

결과

 

문제를 풀면서 2, 3단계는 정규표현식을 사용해서 풀면 더 손쉽게 풀 수 있을 것 같다고 생각했습니다.

그런데 막상 정규표현식을 사용하려고 하니 문법이 하나도 생각나지 않았습니다.

문제를 풀고나서 다른 사람의 풀이를 살펴보니 실제로 정규표현식을 사용해서 맛깔나게 푼 사람들이 많았습니다.

정규표현식을 예전에 공부할 때 너무 어렵다고 생각했었는데 역시나 약점으로 잡히네요.

공부 빡세게 하고 나서 정규표현식을 사용해서 다시 풀어봐야겠습니다.

 

 

 

※ 궁금한 부분, 이상한 점 및 오타는 댓글에 부탁드립니다.

※ 더 효율적이고 빠른 정답을 환영합니다.

반응형

댓글