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

뻥튀기아이스크림·2025년 3월 17일
1
post-thumbnail

◽ 문제 출처

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

◽ 문제

◽ 입력 & 출력

◽ 내 풀이

def solution(n):
    answer = []
    
    x = 2
    while x <= n:
        if n % x == 0:
            if x not in answer:
                answer.append(x)
            n //= x
        else:
            x += 1
            
    return answer
  • 소인수는 2부터 시작한다.
  • 소인수가 주어진 수가 될 때까지 반복하며 나누어 떨어지면 소인수이다.
  • 중복을 체크하여 answer 리스트에 담는다.
  • 더 나눌 수 있을 수도 있으니, n //= x 를 통해 다시 반복할 수 있게 설정한다.
  • 소인수가 아니면 큰 수로도 더 나누어본다.

◽ 다른 사람 풀이

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
  • 소수 판별하는 방식으로 소수인 나눌 수를 구하고, 해당 수로 나누어 떨어지고, 소수라면 소인수이므로 리스트에 추가하는 방식이다.

◽ 더 나아가기

  • 아래쪽 풀이중에 if 조건에서 연산자의 우선순위를 잘 고려해야 했다.
  • if not n % i and is_prime(i) 에서 notn % i 값만 반전하고, 이후에 and 연산이 실행된다.



피드백은 언제나 환영입니다 :)

profile
성장하고 싶은 개발자

0개의 댓글