View

문제 설명

순서쌍이란 두 개의 숫자를 순서를 정하여 짝지어 나타낸 쌍으로 (a, b)로 표기합니다. 자연수 n이 매개변수로 주어질 때 두 숫자의 곱이 n인 자연수 순서쌍의 개수를 return하도록 solution 함수를 완성해주세요.


제한사항
  • 1 ≤ n ≤ 1,000,000

 

입출력 예nresult
20 6
100 9

입출력 예 설명

입출력 예 #1

  • n이 20 이므로 곱이 20인 순서쌍은 (1, 20), (2, 10), (4, 5), (5, 4), (10, 2), (20, 1) 이므로 6을 return합니다.

입출력 예 #2

  • n이 100 이므로 곱이 100인 순서쌍은 (1, 100), (2, 50), (4, 25), (5, 20), (10, 10), (20, 5), (25, 4), (50, 2), (100, 1) 이므로 9를 return합니다.

나의 풀이

def solution(n):
    m = n
    cnt =0
    while m >0:
        if n % m ==0:
            cnt +=1
        m -=1
    return cnt


다른 풀이

list의 원소중에서 if 조건에 해당하는 원소만을 구하거나, 그 갯수를 구하고 싶을 때, filter()를 사용하면, 유용하게 구할 수 있다.
여기에 조건함수가 한줄로 나타낼정도록 간결하다면,  lambda 함수를 사용할 수 있다. 

def solution(n):
    return len(list(filter(lambda v: n % (v+1) == 0, range(n))))
  • range(n) : 0부터  n-1까지의 수를 나타냄
  • list(rage(n)): list로 나타내로 싶으면, list 로 묶어준다.
  • filter(조건함수, 순회가능한 데이터) : 두번째 인자에서 첫번째 인자로 넘어온 조건 함수를 만족하는 데이터만을 반환한다.
    filter() 함수는 filter 타입으로 결과를 리턴. -> 따라서 list의 길이를 구하려면, list()로 묶어주어야 한다.

range 사용의 예

range(start, stop, step)

range(0, 20, 2)

0, 2, 4, 6, 8, 10, 12, 14, 16, 18

마지막 인자 step은 숫자의 간격을 나타낸다.

range(20, 0, -2)

20, 18, 16, 14, 12, 10, 8, 6, 4, 2

step으로 음수를 지정할 수 있다

성능

코드의 길이와 별개로 성능면에서 따져 보았을 때, 

나의 풀이로 푼것이 속도가 빠름을 확인할 수 있었다.

 

Reference

 

https://www.daleseo.com/python-filter/

https://withcoding.com/79

Share Link
reply
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31