Programming/Programmers 문제풀이

신규 아이디 추천

홍열 2021. 3. 8. 09:31
728x90

2021 카카오 코딩테스트 1번 문제

 

주어진 규칙대로 풀면 되는 문제 

 

정규식 표현을 사용해서 풀어도 되는데, 정규식은 어려우므로 그냥 풀었음

def solution_kakao_1(new_id):
    answer = ''

    #허용되는 case - 문자, 숫자, '.', '_', '-'
    # 1번 규칙
    id = new_id.lower()
    # 2번 규칙
    id = "".join([ch for ch in id if ch.isalnum() or ch == '.' or ch == '-' or ch == '_'])
    # 3번 규칙
    for i, value in enumerate(id):
        if i > 0 and id[i-1] == '.' and id[i] == '.':
            continue
        answer += value
    # 4번 규칙
    if len(answer) > 0 and answer[0] == '.':
        answer = answer[1:]
    if len(answer) > 0 and answer[-1] == '.':
        answer = answer[:-1]
    # 5번 규칙
    if len(answer) == 0:
        answer = "a"
    # 6번 규칙
    if len(answer) > 15:
        answer = answer[:15]

        if answer[-1] == ".":
            answer = answer[:-1]

    # 7번 규칙
    if len(answer)<=2:
        ch = answer[-1]
        while len(answer) < 3:
            answer += ch

    return answer

 

코드중에 고쳐야할 부분은 다음과 같다. 

 

2번 규칙을 할때  새로운 리스트를 만들었는데, 좀 더 간결히 해보면

   for c in new_id:
        if c.isalpha() or c.isdigit() or c in ['-', '_', '.']:
            answer += c

위와 같이 만들 수 있다.

 

3번 규칙을 검사할때 for문보다는 '..' 자체를 찾고, 대체하면 된다.

   while '..' in answer:
        answer = answer.replace('..', '.')

7번 규칙에서는 while문으로 계속 반복하면 되는거였다.

    while len(answer) < 3:
        answer += answer[-1]

 

다른 사람이 푼 전체 코드는 다음과 같다.

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