-
[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'공부 > 알고리즘' 카테고리의 다른 글
[python] Codility Lesson 5-3. MinAvgTwoSlice (0) 2021.07.27 [python] Codility Lesson 5-2. GenomicRangeQuery (0) 2021.07.26 [python] Codility Lesson 4-4. PermCheck (0) 2021.07.25 [python] Codility Lesson 4-3. MissingInteger (0) 2021.07.25 [python] Codility Lesson 4-2. MaxCounters (0) 2021.07.25