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
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
programmers) 문자열 정렬하기 (1) (0) | 2022.11.06 |
---|---|
programmers) 숨어있는 숫자의 덧셈 (1) (0) | 2022.11.06 |
programmers) 세균 증식 (0) | 2022.11.06 |
programmers) 문자 반복 출력하기 (0) | 2022.11.06 |
programmers) 배열의 유사도 (0) | 2022.11.06 |
reply