개발/알고리즘

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

개발자_티모 2022. 10. 3. 18:14
반응형

풀이

연속된 문자열의 깔끔한 처리

 

코드

"연속된 문자를 복잡하게 처리하는 코드"

def get_rule2(id):
    new_id = "" 

    for i in range(len(id)):
        if not id[i].isalpha() and not id[i].isdigit():
            if not id[i] in ['.', '-', '_']:
               continue
        
        new_id += id[i]

    return new_id

def get_rule3(id):
    new_id = "" 
    end = -1

    for i in range(len(id)):
        if not id[i].isalpha():
            if id[i] == '.':
                end = i

                for j in range(i + 1, len(id)):
                    if id[j] != '.':
                        break

                    end = j

        if end <= i:
            new_id += id[i]
            
    return new_id
    

def solution(new_id):
    answer = new_id.lower()
    new_id = new_id.lower()

    new_id = get_rule2(new_id)
    new_id = get_rule3(new_id)
    new_id = new_id.lstrip('.')
    new_id = new_id.rstrip('.')
    
    if new_id == "":
        new_id = 'a'

    if 16 <= len(new_id):
        new_id = new_id[0:15].rstrip(".")

    while len(new_id) < 3:
        new_id += new_id[-1]

    return new_id

if __name__ == "__main__":
    solution("123_.def")

 

"깔끔하게 처리한 코드"

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

 

소감

이런 문제는 구현이 귀찮아 진다. 그래서 풀고나면 다른 분들의 코드를 많이 참조하면서 배운다. 이번에도 연속된 '..' 을 재미나게 처리하는 방법을 배웠다.  ".." in string -> string.replace(".")은 상당한 코드인듯하다.

반응형