코딩테스트

프로그래머스 레벨 0 소인수분해

choyou831 2024. 4. 14. 10:49

=

문제 상황은 간단하다. n를 소인수 분해 하면되는 문제이다.

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

이런 식으로 for문을 돌려서 인수를 하나씩 찾는 코드를 작성했다.

하지만 만약 n = 252일 경우에 2,3,6,7로 정확하게 소인수 분해가 되지않는다.

그 이유를 위의 코드를 찾아보면 i는 2,3,4,~n까지 돌아가는데 소인수분해를 정확히하려면

n값이 2에서 실행되었다면 3이 아니라 다시 2부터 소인수분해를 해야한다.

def solution(n):
    answer = []
    k = 2
    while k<=n:
        if n%k==0:
            n //= k
            answer.append(k)
        else:
            k +=1
    answer = list(set(answer))
    sort_answer = sorted(answer)
    return sort_answer

k의 초기값을 2로 잡고 while문을 통해서 만약 k가 n의 인수이면 k값을 answer에 추가하고

인수가 아닐경우 k의 값에 1을 더해서 다음인수를 찾는 과정을 거쳐주면된다.

그리고 list를 set으로 만들어서 중복을 제거하고 sort를 통해 정렬까지해주면 된다.

 

 

느낀점:for문을 통해 부족한 부분을 while문을 통해 사용해줄수있다.