본문 바로가기

[프로그래머스 Lv.0] 소인수분해

@doyiya242025. 8. 1. 17:29

소인수분해

 

문제 설명

소인수분해란 어떤 수를 소수들의 곱으로 표현하는 것입니다. 예를 들어 12를 소인수 분해하면 2 * 2 * 3 으로 나타낼 수 있습니다. 따라서 12의 소인수는 2와 3입니다. 자연수 n이 매개변수로 주어질 때 n의 소인수를 오름차순으로 담은 배열을 return하도록 solution 함수를 완성해주세요.

 

제한사항

  • 2 ≤ n ≤ 10,000

입출력 예 설명

입출력 예 #1

  • 12를 소인수분해하면 2 * 2 * 3 입니다. 따라서 [2, 3]을 return합니다.

입출력 예 #2

  • 17은 소수입니다. 따라서 [17]을 return 해야 합니다.

입출력 예 #3

  • 420을 소인수분해하면 2 * 2 * 3 * 5 * 7 입니다. 따라서 [2, 3, 5, 7]을 return합니다.

 

 

내가 작성한 코드

def solution(n):
    d = 2
    factorization = []
    
    while d <= n:
        if n % d == 0:
            if d not in factorization:
                factorization.append(d)
            n /= d
        else:
            d += 1
            
    return factorization

-> 처음에는 중복을 제거하기 위해 list(set(factorization))을 사용했다. list(set(factorization))은 중복은 제거하지만 순서가 뒤섞여서, 정답과 순서가 다르면 오답 처리될 수 있다는 것을 알게 되었다. 

 

 

 

 

다른 사람이 작성한 코드

def is_prime(n):
    for i in range(2, int(n ** 0.5) + 1):
        if not n % i:
            return False
    return True

def solution(n):
    answer = []
    for i in range(2, n + 1):
        if not n % i and is_prime(i):
            answer.append(i)
    return answer

=> 앞에서 적용했던 에라토스테네스 방식으로 소수 판별 함수를 먼저 구현한것 같다. 알고는 있었지만 이번엔 이용해봐야지~ 했지만 적용 방법을 몰라서 다른 방법으로 도전했다.. 이제는 판별 함수를 어떻게 구현하고 어떻게 적용해야하는지 알것 같다.

 

 

 

 

 

 

회고

한 함수가 길어지는 것보다 하나의 함수를 만들어서 적용하는 것이 낫다.  '코드는 읽기 쉽고, 재사용이 가능해야한다!'라는 기본적인 문장을 많이 들어봤을 것이다. 함수를 구현할 수 있다면 구현하는것이 좋다. 다음부턴 함수를 이용하기...메모..

 

 

 

 

 

 

 

참고 블로그

https://velog.io/@pric/프로그래머스파이썬-소인수분해-수학-Level-0

 

[프로그래머스][파이썬] 소인수분해 - 수학 (Level 0)

https://school.programmers.co.kr/learn/courses/30/lessons/120852소인수는 2부터 시작한다.소인수가 주어진 수가 될 때까지 반복하며 나누어 떨어지면 소인수이다.중복을 체크하여 answer 리스트에 담는다.더 나

velog.io

https://needneo.tistory.com/112

 

[Python] 파이썬, 소인수 분해하기

소인수분해(Prime Factorization)란 다들 알다시피 1보다 큰 자연수인 소인수(소수인 인수)들만의 곱으로 표현하는 것을 말한다. 소인수는 일단 1이라는 값이 아닌 2부터 시작하는 것이 핵심이며, 2로

needneo.tistory.com

 

목차