본문 바로가기

알고리즘/카카오 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' 카테고리의 다른 글

키패드 누르기 (Level 1)  (0) 2022.05.26
숫자 문자열과 영단어 (Level 1)  (0) 2022.05.25
오픈채팅방 (Level 2)  (0) 2022.05.24
문자열 압축 (Level 2)  (0) 2022.05.23
신고 결과 받기 (Level 1)  (0) 2022.05.20