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

소인수분해

싱싱한복초이 2024. 10. 21. 15:18

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

[문제 설명]

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

 

제한사항

  • 2 ≤ n ≤ 10,000

[나의 풀이]

def solution(n):
    answer=[]
    for i in [2,3,5,7]:
      if n % i == 0:
        answer.append(i)
        while n % i ==0:
          n //= i
    if n > 1:             
      answer.append(n)
    return sorted(answer)

처음에 이렇게 작성했는데 채점결과가 91.7/100 이었다. 뭔가 구멍이 있다는 말이겠지

 

챗지피티의 도움으로 완성된 코드(^^)>..

def solution(n):
    answer = []
    i = 2
    while i * i <= n:  # n의 제곱근까지 반복
        if n % i == 0:
            answer.append(i)
            while n % i == 0:
                n //= i  # n을 i로 나눔
        i += 1
    if n > 1:  # 마지막 남은 소인수가 있는 경우 추가
        answer.append(n)
    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

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

문자열 정렬하기(1)  (0) 2024.10.23
숨어있는 숫자의 덧셈(1)  (0) 2024.10.22
모음 제거  (0) 2024.10.20
주사위의 개수  (0) 2024.10.18
합성수 찾기  (0) 2024.10.17