본문 바로가기

알고리즘/카카오 EASY

신규 아이디 추천 (Level 1)

문제

https://programmers.co.kr/learn/courses/30/lessons/72410

 

코딩테스트 연습 - 신규 아이디 추천

카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로

programmers.co.kr

 

내 풀이

파이썬 함수를 얼마나 자유자재로 쓸 수 있는지에 따라 푸는 속도가 달라지는 문제이다.

문제에서 하라는 대로 그대로 구현했다.

 

def solution(new_id):
    # 1
    new_id = new_id.lower()
    # 2
    tmp = ""
    for s in new_id:
        if s.isalpha() or s.isdigit() or s == '-' or s == '_' or s == '.':
            tmp += s
    # 3, 4
    new_id = tmp.split('.')
    new_id = '.'.join([x for x in new_id if x != ''])
    # 5
    if new_id == '': new_id = 'a'
    # 6
    if len(new_id) >= 16: new_id = new_id[:15]
    if new_id[-1] == '.': new_id = new_id[:len(new_id)-1]
    # 7
    if len(new_id) == 1: new_id = new_id*3
    if len(new_id) == 2: new_id = new_id + new_id[-1]
    
    return new_id

 

다른 풀이

새로 배운 것

  • c in ['-', '_', '.']
  • answer = answer.replace('..', '.') -> 근데 내 방법이 좀 더 좋은 것 같다.
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

 

과거 나의 풀이

풀이가 많이 지저분하다.

 

def solution(new_id):
    ans = ""
    # 1
    new_id = new_id.lower()

    # 2
    for n in new_id:
        if (n.isalpha() == False) and (n.isdigit() == False) and (n != '-') and (n != '_') and (n != '.'):
            continue
        ans += n
    new_id = ans
    ans = ""

    # 3
    flag = False
    for n in new_id:
        if n == '.' and flag == False:
            ans += n
            flag = True
        elif n != '.':
            ans += n
            flag = False
    new_id = ans
    ans = ""

    # 4
    if new_id[0] == '.' and new_id[-1] == '.':
        new_id = new_id[1:len(new_id)]
    elif new_id[0] == '.' and new_id[-1] != '.':
        new_id = new_id[1:]
    elif new_id[0] != '.' and new_id[-1] == '.':
        new_id = new_id[:len(new_id)-1]

    # 5
    if new_id == "":
        new_id = "a"

    # 6
    if len(new_id) >= 16:
        new_id = new_id[:15]

    if new_id[0] == '.' and new_id[-1] == '.':
        new_id = new_id[1:len(new_id)]
    elif new_id[0] == '.' and new_id[-1] != '.':
        new_id = new_id[1:]
    elif new_id[0] != '.' and new_id[-1] == '.':
        new_id = new_id[:len(new_id)-1]

    # 7
    if len(new_id) <= 2:
        n = new_id[-1]
        new_id += n*(3-len(new_id))
    return new_id

 

총평

과거의 '나'는 좀 수치스럽게 코드를 짰던 것 같다.

현재의 '나'는 좀 발전된 것 같기도~

'알고리즘 > 카카오 EASY' 카테고리의 다른 글