[python] 정수의 약수 개수 구하기(3가지 방법)

chaemin·2022년 11월 10일

Python

목록 보기
4/6

문제 참고: 순서쌍의 개수


정수의 약수의 개수


문제는 정수의 약수를 구하라고 나오지 않았지만,
약수의 개수를 구한다고 생각하면 쉬운 문제이다.

정수 n이 입력된다고 했을 때, n의 약수는 n을 나누었을 때 나누어 떨어지는 수들이다.

예를 들어, 20의 약수는 1, 2, 4, 5, 10, 20으로 6개이다.

그렇다면 약수의 개수는 어떻게 구할까?
파이썬으로 다음 세가지의 방법을 사용할 수 있다.

  1. for, if
  2. filter
  3. list comprehension

for, if 문

가장 기본적인 방법이다.


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 함수

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

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로 리스트를 만들어 그 개수를 반환한다.


profile
창원대학교 컴퓨터공학과 대학원생

0개의 댓글