프로그래머스/파이썬_입문

약수 구하기+set(),extend()

싱싱한복초이 2024. 11. 6. 17:29

https://school.programmers.co.kr/learn/courses/30/lessons/120897

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

[문제 설명]

정수 n이 매개변수로 주어질 때, n의 약수를 오름차순으로 담은 배열을 return하도록 solution 함수를 완성해주세요.

 

[나의 풀이]

def solution(n):
    return [i for i in range(1,n+1) if n % i == 0]

 

[다른 풀이]

def solution(n):
    return list(filter(lambda v: n % v == 0, [i for i in range(1, n//2+1)])) + [n]

⭐아이디어: n의 절반 이상인 숫자는 약수가 될 수 없기 때문에, 최대 n//2까지만 검사하여 연산 효율성을 높인다.

def solution(n):
    answer = list(set([1, n]))
    for i in range(2, int(n ** 0.5) + 1):
        if not n % i:
            answer.extend(list(set([i, n // i])))
    return sorted(answer)

⭐ 모든 약수를 찾기 위해 n의 제곱근까지만 검사하면 된다.

 

Q. if not n % i:가 if n % i ==0:이랑 같은 표현인?

 

Q. set()이 어떻게 중복된 값을 제거하는지?

 

Q. extend()는 무엇을 하는 함수이고, append()와 어떻게 다른지?

 

'프로그래머스 > 파이썬_입문' 카테고리의 다른 글

가장 큰 수 찾기  (0) 2024.11.08
편지 + 비트시프트연산자 <<  (0) 2024.11.07
한 번만 등장한 문자  (0) 2024.11.05
인덱스 바꾸기  (0) 2024.11.03
영어가 싫어요  (0) 2024.11.02