문제 참고: 순서쌍의 개수
문제는 정수의 약수를 구하라고 나오지 않았지만,
약수의 개수를 구한다고 생각하면 쉬운 문제이다.
정수 n이 입력된다고 했을 때, n의 약수는 n을 나누었을 때 나누어 떨어지는 수들이다.
예를 들어, 20의 약수는 1, 2, 4, 5, 10, 20으로 6개이다.
그렇다면 약수의 개수는 어떻게 구할까?
파이썬으로 다음 세가지의 방법을 사용할 수 있다.
가장 기본적인 방법이다.
def solution(n):
answer = 0
for i in range(1, n+1):
if n % i == 0:
answer+=1
return answer
1부터 자기 자신까지의 범위 내 정수로 자기 자신을 나누었을 때,
0이 되면 answer 변수를 1씩 증가시켜 그 개수를 반환한다.
filter(function, iterable, /)
function이 참을 돌려주는 iterable 요소들로 iterator를 구축한다
iterable은 시퀀스, 이터레이션을 지원하는 컨테이너 또는 이터레이터일 수 있다
*filter 객체를 반환하므로 리스트로 형 변환을 해주어야 한다
iterator 객체는 순서대로 다음 값을 리턴할 수 있는 객체를 말한다
*function이 None인 경우 항등함수가 가정된다
def solution(n):
return len(list(filter(lambda x:n%x==0, range(1, n+1))))
filter에서 적용할 함수를 lambda로 만든다.
range(1, n+1)로 순서대로 반환된 정수들이 lambda 함수에 적용된다.
이때 참인 경우, 객체로 반환되고 그 객체들을 모두 list로 형 변환을 해준 다음, 최종적으로 list 요소의 개수를 반환하는 방법이다.
list comprehension이란?
https://velog.io/@chaemin/python-List-Comprehension-리스트-컴프리헨션
def solution(n):
return len([i for i in range(1, n+1) if n%i==0])
list comprehension에서는 두 개의 표현식이 사용 가능하다.
range 함수로 지정된 범위 내의 정수가 n%i==0 조건식을 만족하는 경우,
해당 i로 리스트를 만들어 그 개수를 반환한다.