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

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



풀이

주어진 조건을 완벽히 구현할 수 있는지가 문제의 포인트라고 생각했다. 단순한 구현 문제로 Python의 .lower(), .isalpha(), .isdigit(), ...등의 함수를 사용하여 주어진 조건을 완벽히 구현할 수 있다면 쉽게 문제를 풀 수 있다고 생각한다.

문제의 3번 조건 코드를 작성하는데 오래 걸렸다. idx변수를 이용해 문자열의 모든 문자를 하나씩 탐색하면서 '.'가 2개 이상 있다면 idx를 이용하여 문자열 슬라이싱을 하고, 슬라이싱 된 문자열 사이에 '.'를 넣어주면서 전체 문자열을 계속 갱신하는 방식으로 구현하였다.



코드

def solution(new_id):
    answer = new_id

    # 1번
    answer = answer.lower()

    # 2번
    temp = ''
    for i in range(len(answer)):
        if answer[i].isalpha() or answer[i].isdigit() or answer[i] == '-' or answer[i] == '_' or answer[i] == '.':
            temp += answer[i]
    answer = temp

    # 3번 --> 구현 오래 걸렸다.
    idx = 0  # idx는 계속 증가
    while answer[idx:].count('.') > 1:
        cnt = 0
        # 시작 idx가 '.'이고
        if answer[idx] == '.':
            # 다음으로 연속된 '.'을 찾는 과정
            for i in range(idx + 1, len(answer)):
                if answer[i] != '.':
                    break
                cnt += 1
            answer = answer[:idx] + '.' + answer[idx + cnt + 1:]
        idx += 1

    # 4번
    # 첫 번째 if에서 문자 삭제되어서 빈 문자열이 될 때 주의!
    if len(answer) > 0 and answer[0] == '.':
        answer = answer[1:]
    if len(answer) > 0 and answer[-1] == '.':
        answer = answer[:len(answer) - 1]

    # 5번
    if len(answer) == 0:
        answer = 'a'

    # 6번
    if len(answer) >= 16:
        answer = answer[:15]
        if answer[-1] == '.':
            answer = answer[:14]

    # 7번
    if len(answer) <= 2:
        word = answer[-1]
        while len(answer) < 3:
            answer += word

    return answer

좋은 웹페이지 즐겨찾기