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
- 백준 node.js
- Frontend Roadmap
- 프로그래머스 데브코스
- useRef 지역 변수
- 개발자 특강
- 프로그래머스 K_Digital Training 프론트엔드
- KDT 프로그래머스 데브코스 프론트엔드
- useEffect return
- 모던 자바스크립트 딥다이브
- 프로그래머스 데브코스 프론트엔드 TIL
- 리팩토링 회고
- 투포인터알고리즘 js
- frontend roadmap study
- react 프로젝트 리팩토링
- Vue3 Router
- react customHook 예시
- 모던 자바스크립트 Deep Dive
- 모던 javascript Deep Dive
- 우테캠 회고록
- TypeScript 문법 소개
- 프로그래머스 K_Digital Training
- 모던 자바스크립트 TIL
- 인프런 자바스크립트 알고리즘 문제풀이
- 머쓱이
- Vue3
- KDT 프로그래머스
- K_Digital Training
- 모던 자바스크립트 Deep Dive TIL
- 백준 js
- 프로그래머스 데브코스 프론트엔드
Archives
- Today
- Total
프론트엔드 개발자의 기록 공간
[프로그래머스 JavaScript] 소수 만들기 본문
프로그래머스 Level1 소수 만들기 문제
문제 풀이 : 주어진 배열의 요소에서 3개를 선택하여 만든 조합으로 소수 판별을 통해
몇개의 소수가 만들어지는지 구하는 문제이다.
처음에 주어진 숫자중에 조합해서 3개를 만드는 경우의 수를 구해야 될거 같아서 수학의 "조합" 공식을 사용했다.
하지만 풀이 과정에서 그럴 필요가 없는것을 깨닫고 다시 풀었다.
문제의 예 nums[1,2,3,4] 에서 3개를 뽑을때 가능한 경우는 수는 4가지 경우이다.
[1,2,3], [1,2,4], [1,3,4], [2,3,4] 여기서 패턴을 찾으면된다.
배열의 길이를 n이라했을때, 0~n-2를 첫번째 인덱스, 1~n-1를 두번째 인덱스, 2~n를 세번째 인덱스로 지정하여
삼중 반복문을 돌리게되면 중복을 제외한 모든 경우의 수를 구할수있다.
그 후, 삼중 반복문을 통해 선택된 세개의 합을 소수 판별을 해주면된다.
소수 판별 알고리즘은 보통 2부터~n-1까지 반복문을 통해 나머지의 여부로 판별하는데,
이는 비효율적이므로 JS에서 제공하는 Math.sqrt 제곱근 메소드를 통해
2~제곱근 까지 반복문을 통해 소수 판별을 해주면된다. (위의 과정보다 연산횟수가 현저히 줄어든다.)
(하지만 시간복잡도는 둘다 O(n)이라서 의미는 없지만 그냥 가독성있게 짜봤다...)
function solution(nums) {
var answer = 0;
var array = [];
var len = nums.length;
for(let i=0; i<len-2; i++){
for(let j=i+1; j<len-1; j++){
for(let k=j+1; k<len; k++){
array.push(nums[i]+nums[j]+nums[k]);
}
}
}
//reduce함수 이용
answer = array.reduce((acc, cur, idx) => acc + primeNumber(cur),0)
return answer;
}
//소수 판별 함수
function primeNumber(n){
for(let i=2; i<= Math.sqrt(n); i++) {\
//소수가 아닐 경우
if(n%i == 0){
return 0;
}
}
//소수일 경우
return 1;
}
* 삼중 반복문인 형태로 시간복잡도는 O(n^3)을 가진다.
조금 더 고민해본다면 시간복잡도를 줄일 수 있을것같다.
Level1인데 어려웠다....
728x90
'알고리즘_JS > 프로그래머스_Level1' 카테고리의 다른 글
[프로그래머스 JavaScript] 모의고사 (0) | 2021.05.22 |
---|---|
[프로그래머스 JavaScript] K번째수 (0) | 2021.05.22 |
[프로그래머스 JavaScript] 완주하지 못한 선수 (0) | 2021.05.20 |
[프로그래머스 JavaScript] 신규 아이디 추천 (0) | 2021.05.17 |
[프로그래머스 JavaScript] 내적 (0) | 2021.05.08 |
Comments