Programmers - 신규 아이디 추천

박재현·2022년 4월 18일
0

알고리즘 부수기

목록 보기
40/43
post-thumbnail

문제링크

나의 풀이

def solution(new_id):
    new_id = change(new_id)
    new_id = deleteChar(new_id)
    new_id = deleteDot(new_id)
    new_id = lengthCtrl(new_id)
    result = deleteDot(new_id)
    result = ''.join(result)
    return result


def change(id):
    id = id.lower()
    return id


def deleteChar(id):
    id = list(id)
    i = 0
    while (i < len(id)):
        if 97 <= ord(id[i]) <= 122 or ord(id[i]) == 46 or ord(id[i]) == 55 or ord(id[i]) == 137 or 48 <= ord(id[i]) <= 57 or ord(id[i]) == 95 or ord(id[i]) == 45:
            i += 1
        else:
            id.pop(i)
    return id


def deleteDot(id):
    i = 0
    while (i < len(id)):
        if i == 0:
            if id[i] == '.':
                id.pop(0)
                continue
        if i == len(id) - 1:
            if id[i] == '.':
                id.pop(i)
                continue

        if id[i] == '.':
            if i + 1 < len(id):
                if id[i + 1] == '.':
                    id.pop(i + 1)
                else:
                    i += 1
        else:
            i += 1
    return id


def lengthCtrl(id):
    if len(id) == 0:
        return 'aaa'
    elif len(id) >= 16:
        tmp = id[:15]
        return tmp
    elif len(id) <= 2:
        tmp = id.pop()
        while len(id) < 3:
            id.append(tmp)
        return id
    else:
        return id
  • 조건이 많은 문제였는데 조건을 전부 파악하지 않고 일단 코드를 짠 후, 디버깅을 하며 조건을 추가해서 시간이 오래걸렸다.
  • 함수명이나 변수명을 고려하는데 시간이 꽤 걸렸다.

다른 풀이

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
  • 목적에 따라 함수를 분리하지 말고, 주석을 활용하자.
  • 인덱스 -1을 잘 활용하자.
  • python의 string api들에 익숙해질 필요가 있다.
profile
공동의 성장을 추구하는 개발자

0개의 댓글