본문 바로가기

Python(알고리즘,문제풀이)/프로그래머스(입문100제)

코딩테스트입문 / 소인수분해

728x90

소인수분해 

- 소인수분해 => 어떤 자연수를 소인수들의 곱으로 표현하는 것을 말한다

 

소인수

- 소인수 => 인수들 중에서 소수인 것(소수 : 1보다 큰 자연수 중 1과 자기 자신만을 약수로 가지는 수)

 

인수

- 인수 => 어떤 수를 곱하기 만으로 표현했을 때 곱해지는 인자들

 


📚문제

출처 : 프로그래머스 / 소인수분해(https://school.programmers.co.kr/learn/courses/30/lessons/120852)

 

📝풀이

def solution(n):

    answer = []
    start_num = 2 # 소인수에 1은 포함되지 않으므로 최소 소수인 2부터 시작
    
    while start_num <= n:
        if n % start_num == 0:
            answer.append(start_num) #12를 예로들면 2로 나누어 떨어지므로 answer에 2 추가하고 2로 나누기
            n = n // start_num #2로 나눈 몫으로 다시 while문 반복
        else:
            start_num += 1
    return list(dict.fromkeys(answer))

 

구글링하여 참고...

프로그래머스 문제 풀다보면 오랜만에 보는 수학개념들을 공부할 수 있다...^^

여기서 하나 또 새로운 코드를 알았다

 

마지막에 return 부분에서

return list(dict.fromkeys(answer))

이런 코드를 써주는데

중복을 제거하기위해 

일반적으로 set을 사용하는데 그렇게 되면 순서가 무시된다

dict.fromkeys()

를 사용하면 순서도 유지하면서 값을 출력할 수 있다.

 

+ dictionary형태이므로 마지막에 list()로 감싸주기

728x90