개발자도전
[프로그래머스] 소인수분해 본문
728x90
[문제]
소인수분해란 어떤 수를 소수들의 곱으로 표현하는 것입니다. 예를 들어 12를 소인수 분해하면 2 * 2 * 3 으로 나타낼 수 있습니다. 따라서 12의 소인수는 2와 3입니다. 자연수 n이 매개변수로 주어질 때 n의 소인수를 오름차순으로 담은 배열을 return하도록 solution 함수를 완성해주세요.
[입출력 예]
n | result |
12 | [2, 3] |
17 | [17] |
420 | [2, 3, 5, 7] |
입출력 예 #1
- 12를 소인수분해하면 2 * 2 * 3 입니다. 따라서 [2, 3]을 return합니다.
입출력 예 #2
- 17은 소수입니다. 따라서 [17]을 return 해야 합니다.
입출력 예 #3
- 420을 소인수분해하면 2 * 2 * 3 * 5 * 7 입니다. 따라서 [2, 3, 5, 7]을 return합니다.
[답]
처음엔 중복 값을 저장해주지 않기 위해 List를 사용하려다가 Set을 사용했었다.
풀이 1.
처음 풀이 시 Set에 소인수 분해 값들을 넣어서 저장해 주었으나 테스트 13번에서 오류가 났다.
해당 문제의 질문하기를 보니 같은 테스트에서 오류난 사람의 댓글에 오름차순으로 정렬을 해주었더니 오류가 해결되었다는 댓글을 보았다.
Set은 순서를 보장하지 않는 자료구조라 정렬해주기 위해 List로 변환하여 정렬해주었다.
그러나 Set을 List로 변환해주는 과정이 번거로워 다른 방법을 찾아보고 다시 코드를 작성해보았다.
풀이 2.
List에 소인수 분해들을 저장하되 answer에 같은 값이 없다면 i값을 저장해주는 코드로 작성해주었다.
이렇게 작성해주니 코드도 훨씬 짧아지고 가독성도 좋아졌다.
또한 코드 실행속도도 훨씬 빨리진 것을 볼 수 있었다.
728x90
'프로그래머스 코딩 테스트' 카테고리의 다른 글
[프로그래머스] 배열 원소의 길이 (0) | 2023.03.30 |
---|---|
[프로그래머스] 컨트롤 제트 (0) | 2023.03.30 |
[프로그래머스] 숨어있는 숫자의 덧셈(1) (0) | 2023.03.24 |
[프로그래머스] 문자열 정렬하기 (1) (0) | 2023.03.24 |
[프로그래머스] 모음 제거 (0) | 2023.03.24 |
Comments