[Level1] 신규 아이디 추천

Quesuemon·2021년 3월 25일
0

코딩테스트 준비

목록 보기
2/111

🛠 문제

2021 KAKAO BLIND RECRUITMENT
https://programmers.co.kr/learn/courses/30/lessons/72410


👩🏻‍💻 해결 방법

문제를 자세히 읽고 그대로 구현하면 되는 문제였다
단계별로 함수를 나누어 구현하였는데, 문자열을 압축해내는 과정을 생각해내기 조금 힘들었다
처음에는 for문을 통해 압축을 시도했었는데 실패하였고, while문을 통해 차례차례 접근하며 압축해 나갈 수 있었다
또한, 앞뒤로 마침표를 제거할 때 빈 문자열인지 체크해주는 것도 필요하다!

소스 코드

def remove_ch(id):
    for i in id:
        if i in "~!@#$%^&*()=+[{]}:?,<>/":
            id = id.replace(i,'')
    return id

def compressed_dot(id):
    idx = 0
    while id[idx:].count('.') > 1:
        dot_cnt = 0
        
        if id[idx] == '.':
            for i in range(idx+1, len(id)):
                if id[i] != '.':
                    break
                dot_cnt += 1
            id = id[:idx] + '.' + id[idx + dot_cnt + 1:]
        
        idx += 1
    return id
    
def remove_dot(id):
    if len(id) and id[0] == '.':
        id = id[1:]
    if len(id) and id[-1] == '.':
        id = id[:-1]
    return id

def check_empty(id):
    if len(id) == 0:
        return "a"
    return id

def check_length(id):
    if len(id) >= 16:
        id = id[:15]
        id = remove_dot(id)
    if len(id) <= 2:
        while len(id) < 3:
            id += id[-1]
    return id
            
def solution(new_id):
    new_id = new_id.lower()  # 소문자 처리
    new_id = remove_ch(new_id)
    new_id = compressed_dot(new_id)
    new_id = remove_dot(new_id)
    new_id = check_empty(new_id)
    new_id = check_length(new_id)
    
    return new_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

0개의 댓글