Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 나라사랑카드
- 코딩테스트 lv0
- 바이트디그리
- udemy
- 프로그래머스 JS
- 패스트캠퍼스
- Flex Container
- 노드
- margin-left
- 내일배움카드
- DOM
- 자바스크립트
- 국비지원
- js
- react강의
- 변수 선언
- CSS
- 프로그래머스 lv0
- K디지털기초역량훈련
- SVG
- 리액트
- js split
- html
- flex
- 코딩테스트 js
- API
- 호이스팅
- javascript
- React
- flex item
Archives
- Today
- Total
꺾이지 않는 마음
[프로그래머스] Lv.0 소인수분해 JS 풀이 본문
🧡문제 설명
소인수분해란 어떤 수를 소수들의 곱으로 표현하는 것입니다. 예를 들어 12를 소인수 분해하면 2 * 2 * 3 으로 나타낼 수 있습니다. 따라서 12의 소인수는 2와 3입니다. 자연수 n이 매개변수로 주어질 때 n의 소인수를 오름차순으로 담은 배열을 return하도록 solution 함수를 완성해주세요.
💛제한사항
- 2 ≤ n ≤ 10,000
💚입출력 예
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합니다.
✨나의 풀이
💜 % 연산자와 includes() 메서드 활용
function solution(n) { let start = 2; let result = []; while(n >1) { if (n % start === 0) { n/=start; if (!result.includes(start)) result.push(start); } else { start +=1 } } return result; }
소수는 2부터 시작한 다는 점을 생각해서 start 변수에 2를 할당하고 반복문을 통해 n을 계속 나눠주었다.
나머지가 0이 아닐 때까지 계속 나눠주었고, 만약 나머지가 0이 아니면 start를 +1 해주고 다시 나누었다.
나누어 떨어지게 하는 수는 result 배열에 저장했고, 중복저장이 안되게끔 includes 메서드를 활용하여 포함 여부를 판별했다.
😮다른 풀이
function solution(n) { let s = new Set(); while (n%2===0) { n/=2; s.add(2); } for (let i = 3; i <= Math.sqrt(n); i++) { while (n%i === 0) { n/=i; s.add(i); } } if (n > 2) s.add(n); return [...s]; }
자바스크립트 내장 객체인 Set()을 활용한 풀이법이다.
Set 객체는 써본 적이 없어서 이 풀이를 보고 검색해 보았는데, 유일한 값을 저장하는 객체라고 한다.
즉, Set 객체 내부에는 중복된 값을 저장할 수 없다는 점을 이용하여 반복문에 사용하고 있다.
add 함수는 Set 객체에 값을 추가할 때 사용하는 내장 메서드이다.
이외에도 삭제, 포함여부 판별 등의 메서드가 있는데 이 참에 시간 내서 Set 객체 관련 포스팅을 한번 해야겠다.
'코딩테스트 기록' 카테고리의 다른 글
[프로그래머스] Lv.0 문자열 밀기 JS 풀이 (0) | 2022.11.03 |
---|---|
[프로그래머스] Lv.0 캐릭터의 좌표 JS 풀이 (0) | 2022.11.01 |
[프로그래머스] Lv.0 구슬을 나누는 경우의 수 JS 풀이 (0) | 2022.11.01 |
[프로그래머스] Lv.0 공 던지기 JS 풀이 (1) | 2022.10.31 |
[프로그래머스] Lv.0 가까운 수 JS 풀이 (0) | 2022.10.29 |
Comments