sm 기술 블로그

신규 아이디 추천(2021 KAKAO BLIND RECRUITMENT) - 파이썬 본문

문제/프로그래머스_파이썬

신규 아이디 추천(2021 KAKAO BLIND RECRUITMENT) - 파이썬

sm_hope 2022. 10. 6. 09:36
import re

def step_1(id):
    return id.lower()

def step_2(id):
    return re.sub(r'[^0-9a-z-_.]', "", id)

def step_3(id):
    while(id.find("..") != -1):
        id = id.replace("..",".")
    return id

def step_4(id):
    if(id[0] == "."):
        id = id[1:]
    if(len(id) != 0 and id[-1] == "."):
        id = id[:len(id)-1]
    return id

def step_5(id):
    if(len(id)==0):
        id = "a"
    return id

def step_6(id):
    if(len(id)>=16):
        id = id[:15]
        id = step_4(id)
    return id

def step_7(id):
    while(len(id) <= 2):
        id += id[-1]
    return id


def solution(new_id):
    answer = ''
    answer = step_1(new_id)
    answer = step_2(answer)
    answer = step_3(answer)
    answer = step_4(answer)
    answer = step_5(answer)
    answer = step_6(answer)
    answer = step_7(answer)
    return answer

문제요약

1~7단계에 맞는 조건으로 아이디를 추천하라

 

설명

문자열을 얼마나 잘 사용하는지에 대해서 물어보는 문제이다.

 

단계1

def step_1(id):
    return id.lower()

대문자를 소문자로 바꾼다.

 

단계2

def step_2(id):
    return re.sub(r'[^0-9a-z-_.]', "", id)

정규표현식을 사용하여 숫자, 소문자, -, _ , . 이 아닌 문자들은 다 제거한다.

 

단계3

def step_3(id):
    while(id.find("..") != -1):
        id = id.replace("..",".")
    return id

연속해서 ..이 나온다면 .으로 변경하라 (..이 없을 때 까지 반복하면 됨)

 

단계4

def step_4(id):
    if(id[0] == "."):
        id = id[1:]
    if(len(id) != 0 and id[-1] == "."):
        id = id[:len(id)-1]
    return id

처음 문자가 . 이거나 맨 뒤에 문자가 . 이면 잘라준다.

(맨뒤를 검사할 때 만약 문자열이 공백이면 에러가 발생하므로 공백이 아닌 경우에만 진행되게 조건을 추가한다.)

 

단계5

def step_5(id):
    if(len(id)==0):
        id = "a"
    return id

문자열이 공백일 경우 a를 추가한다.

 

단계6

def step_6(id):
    if(len(id)>=16):
        id = id[:15]
        id = step_4(id)
    return id

문자열의 길이가 16이상일 경우 진행되며 자르는 과정이다.

문자열이 잘라진 후에 맨 뒤의 문자가 .일 수 있으므로 단계 4를 다시 진행한다.

 

단계7

def step_7(id):
    while(len(id) <= 2):
        id += id[-1]
    return id

문자열의 길이가 2 이하일 경우 마지막 문자를 이어 붙여준다.

Comments