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

알고리즘 저장소·2021년 1월 27일
0

프로그래머스

목록 보기
1/29
post-custom-banner

1. 요약

  • 사용자가 카카오 계정을 만들기 위해, 문제에서 주어진 제약조건을 만족해야한다.
  • 제약조건을 만족하지 못하면, 사용자가 입력한 계정과 비슷하고 제약조건을 만족하는 계정을 추천한다.
  • 우리가 해야 할 일

  1. 사용자가 입력한 카카오 계정 유효성 검사
  2. 유효성을 만족하지 못하면, 유효성을 만족하는 비슷한 계정 추천

2. 알고리즘

  • 문제에서 알고리즘이 주어졌기 때문에, 있는 그대로 구현하면 된다.

3. 코드

valid_chs = [chr(i) for i in range(ord('a'), ord('z')+1)]
valid_chs += ['.', '-', '_']
valid_chs += [str(i) for i in range(10)]

def remove_unvalid_ch(new_id):
    tmp = ''
    for ch in new_id:
        if ch in valid_chs: tmp += ch

    return tmp

def transform_one_point(new_id):
    if not new_id: return ''
    cnt = 0
    tmp = ''

    for ch in new_id:
        if ch == '.':
            cnt += 1
            if cnt == 2:
                cnt = 1
                continue

        else: cnt = 0
        tmp += ch
    
    return tmp

def remove_sides_point(new_id):
    if not new_id or (len(new_id) == 1 and new_id[0] == '.'): return ''
    tmp = list(new_id)
    if new_id[0] == '.': del tmp[0]
    if new_id[-1] == '.': del tmp[-1]
    return ''.join(tmp)

def solution(new_id):
    new_id = new_id.lower()
    new_id = remove_unvalid_ch(new_id)
    new_id = transform_one_point(new_id)
    new_id = remove_sides_point(new_id)

    if not new_id: new_id = 'a'
    if len(new_id) > 15: new_id = new_id[:15]
    if new_id[-1] == '.': new_id = new_id[:14]
    if len(new_id) < 3:
        for _ in range(len(new_id), 3):
            new_id += new_id[-1]
            
    answer = new_id
    return answer
    

post-custom-banner

0개의 댓글