ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [python] Codility Lesson 5-1. CountDiv
    공부/알고리즘 2021. 7. 26. 03:01

     

    그냥 보자마자 반사적으로 아래와 같이 짜보았다.

     

    문제 조건을 보니 아래와 같이 연산 낭비가 있으면 안될거 같긴했지만 그냥 제출해본 결과 50점을 받았다.

     

    1. 그냥 한번 짜봄.

    def solution(A, B, K):
        # write your code in Python 3.6
        answer = 0
        for i in range(A,B+1):
            if i % K == 0:            
                answer += 1
            else:
                continue
        return answer

     

    codility lesson 문제를 풀며 해당 lesson의 제목에 대한 공부를 좀 진행하고 거기에 맞추어서 코드를 작성하기로 마음을 고쳐 먹었다.

    진작에 이랬어야 됫는데, 그냥 무조건 풀수있다는 자신감으로 풀면 별 도움도 안되고 여튼 lesson 5부터 공부하며 풀어보자!!

     

    lesson 5 Prefix-Sum에 관련해 잘 설명해준 포스팅 https://twpower.github.io/157-prefix-sum-basic-problem을 참고하면 이왕 문제 푸는거 조금 더 얻어 가는 것이 많아 질 것 같다.

     

     

    2. Prefix-Sum에 대해 간략히 학습 진행 한 후 100점나온 코드 (아래 예외 처리하는 부분이 난잡하고 복잡해 아쉽다)

    def solution(A, B, K):
        # write your code in Python 3.6    
        answer = 0
        num_mod_B = 0
        num_mod_A = 0
        for i in range(B, A-1, -1):
            if i % K == 0:
                num_mod_B = i // K
                break
        
        for j in range(A, B+1):
            if j % K == 0:
                num_mod_A = j // K
                break
        if A == 0:
            answer = num_mod_B + 1
            return answer
            
        if num_mod_A == 0 and num_mod_B != 0:
            answer = num_mod_B
            return answer
        elif num_mod_A == 0 and num_mod_B == 0:
            answer = 0
            return answer
        else:
            answer = num_mod_B - num_mod_A + 1
            return answer

     

    1. num_mod_B에 0을 초기값으로 할당하고, A가 될때까지 1씩 감소하며, B % K == 0 이 되는 수를 찾고, num_mod_B에 저장해준다.

     

    2. num_mod_A에 1번과 비슷하게 B가 될떄까지 1씩 증가하며, A % K == 0 이 되는 수를 찾고, num_mod_A에 저장해준다.

     

    3. A가 0일때, num_mod_A 는 0 이고 num_mod_B는 0이 아닐때, 등 예외 상황을 고려해준다.

     

     

     

     

    3. 아쉬움에 다른사람이 작성한 코드 탐방 (출처 : https://sooho-kim.tistory.com/35?category=874886)

     

    def solution(A, B, K):
        QA = A//K
        RA = A%K
        QB = B//K
        count = QB-QA
        if RA ==0:
            count +=1
        return count

     

    • idea : A, B를 K로 나눴을 때 몫을 구하고, A의 나머지가 0이면 B의 몫 - A의 몫 + 1, A의 나머지가 0보다 크면 B의 몫 - A의 몫을 출력합니다.

    예외 상황을 RA 변수값을 통해 잘 설명 해주셨다.

     

     

    위의 나의 코드 처럼 작성하면 코딩테스트 칠때 우왕좌왕 하다 몇몇 testcase fail 뜰것이 뻔하다..

    한단계 만 더 생각 하는 연습하자!!

    728x90

    댓글

Designed by Tistory.