소인수분해란
어떤 수를 소수들의 곱으로 표현하는 것입니다.
예를 들어 12를 소인수 분해하면
2 2 3 으로 나타낼 수 있습니다.
따라서 12의 소인수는 2와 3입니다.
자연수 n이 매개변수로 주어질 때
n의 소인수를
오름차순으로 담은 배열을
return하도록 solution 함수를 완성해주세요.
내 코드
def get_divisors(n):
divisors = []
for i in range(1, int(n**0.5)+1):
if n % i == 0:
divisors.append(i)
if i != n // i: # 제곱근이 아닌 경우만 추가
divisors.append(n // i)
return sorted(divisors)
def solution(n):
answer = []
for e in get_divisors(n):
if len(get_divisors(e)) == 2:
answer.append(e)
return answer
예시 코드
def solution(n):
answer = []
d = 2
while d <= n:
if n % d == 0:
n /= d
if d not in answer:
answer.append(d)
else:
d += 1
return answer
해당 코드는 n의 소인수를 찾는 코드입니다. 코드의 작동 원리를 단계별로 살펴보겠습니다.
초기 변수 설정:
answer: n의 소인수들을 저장할 리스트.
d: 현재 검사하고 있는 숫자. 2부터 시작하여 n까지 검사합니다.
while 반복문:
d가 n 이하인 동안 반복합니다.
if n % d == 0 조건:
현재의 d가 n을 나눌 수 있는지 검사합니다. 만약 나눌 수 있다면, d는 n의 약수입니다.
n을 d로 나눠줍니다. 이렇게 해서 n은 계속해서 작아지게 됩니다. (이 과정에서 n의 소인수를 하나씩 제거하는 효과가 있습니다.)
if d not in answer: 만약 d가 이미 answer 리스트에 없다면, 리스트에 추가합니다. 이렇게 하면 소인수를 중복으로 저장하지 않게 됩니다.
else 문:
d가 n의 약수가 아니라면, d를 1만큼 증가시켜 다음 수로 넘어갑니다.
return answer:
while 반복문이 종료되면, answer 리스트에는 n의 소인수들만 저장되어 있습니다. 이를 반환합니다.
간단하게 요약하면, 이 코드는 2부터 시작하여 n의 약수 중에서 소수인 수를 찾아 answer에 저장하는 작업을 합니다.