ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 신규 아이디 추천
    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

    'Programming > Programmers 문제풀이' 카테고리의 다른 글

    백준 14888 - 연산자 끼워넣기  (0) 2022.04.25
    백준 1339 - 단어 수학  (0) 2022.04.24
    메뉴 리뉴얼  (0) 2021.03.08
    디스크 컨트롤러  (0) 2020.12.24
Designed by Tistory.