프로그래머스_Lv0_소인수분해_파이썬

Today Jeeho Learned·2022년 12월 21일
0

알고리즘

목록 보기
36/38
post-thumbnail

문제 출처

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


내 답안

def solution(n):
    answer = []
    i = 2
    while i <= n:
        if n % i == 0:
            answer.append(i)
            n /= i
        else:
            i += 1

    return (sorted(list(set(answer))))

풀이 정리

  • 고민하다 결국 풀지 못해 구글링 찬스를 사용했다.ㅠㅠ
  • 처음에 고민했던 방법
    1. n까지의 소수를 먼저 뽑아낸다.
    1. 소수로 나누어 떨어지는 숫자를 배열에 담는다.
    1. 중복값을 제거한다.. 라고 생각하는 로직을 짰었는데 이렇게 하면 너무 많은 오래걸리게 된다.
  • 구글링을 통해서 좋은 방법을 찾아냈고, 조금 변경해보았다.
  • 2부터 시작하기때문에 나누어떨어지는지를 확인하고, 떨어지면 answer배열에 추가해준다. 그리고 그때 n값을 나누어줘야한다! 또한 나누어떨어지지 않는 경우에는 i값을 증가시켜주면서 나누어떨어지는 값을 찾아내는 것이다.
  • 마지막에 중복값을 제거하기 위해서는 set을 사용했는데, return이 list형이기 때문에 list(set(answer))형태로 돌려주었는데 에러가 4개가났다. 뭔지 몰라서 고민하다보니 오름차순으로 정렬이 필요한 조건이 있던 것을 확인하지 못했었다.
  • 앞에 sorted를 붙여주니 모든 테스트케이스가 알맞게 동작했다.

다른풀이

while i <= n:
    if n % i == 0:
        if i not in answer:
            answer.append(i)
        n /= i
    else:
        i += 1
  • set을 말고도 그냥 if i not in answer:이라는 조건문을 사용하여 순서대로 차곡차곡 쌓이도록 정렬도가능했다! 기억하자
profile
기록해야 (살아)남는다 !

0개의 댓글