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

Simulation, 문자열


이 문제는 시기는 대로만 하면 되는 ‘빡’구현 문제이다. 그런데 사실 조건만 제대로 지키면 그렇게 어려울 것은 없다. 왜냐하면 파이썬 특성상, 문자열을 다루기 매우 편하기 때문이다.

isupper,lower, isdigit 등 때에 알맞게 사용해보자

구현


def convert_to_lower_case(string):
    answer = ''
    for s in string:
        if s.isupper():
            answer += s.lower()
        else:
            answer += s
    return answer

def trim_strange(string):
    answer = ''
    for s in string:
        if s.islower() or s.isdigit() or s == '-' or s == '_' or s == '.':
            answer += s
    return answer

def compress_dot(string):
    answer = ''
    flag = False
    for s in string:
        if s == '.':
            if flag:
                continue
            flag = True
            answer += s
        else:
            if flag:
                flag = False
            answer += s
    return answer

def trim_dot(string):
    return string.strip('.')

def cut_over_15(string):
    if len(string) > 15:
        return string[:15]
    return string

def put_a(string):
    if len(string) == 0:
        return 'a'
    return string

def concat_last(string):
    answer = string
    while len(answer) < 3:
        answer += string[-1]
    return answer

def solution(new_id):
    answer = convert_to_lower_case(new_id)
    answer = trim_strange(answer)
    answer = compress_dot(answer)
    answer = trim_dot(answer)
    answer = put_a(answer)
    answer = cut_over_15(answer)
    answer = trim_dot(answer)
    answer = concat_last(answer)
    return answer

print(solution("...!@BaT#*..y.abcdefghijklm"))
print(solution("=.="))