반응형
https://programmers.co.kr/learn/courses/30/lessons/12977
나의 풀이
function solution(nums) {
const combiList = [];
for (let i = 0; i < nums.length; i++) {
for (let j = 0; j < nums.length; j++) {
for (let k = 0; k < nums.length; k++) {
if (!combiList.includes(JSON.stringify([nums[i], nums[j], nums[k]].sort())) && nums[i] !== nums[j] && nums[i] !== nums[k] && nums[j] !== nums[k]) {
combiList.push(JSON.stringify([nums[i], nums[j], nums[k]].sort()));
}
}
}
}
return combiList.map(arr => JSON.parse(arr).reduce((acc, cur) => acc + cur))
.filter(val => {
for (let i = 2; i <= Math.sqrt(val); i++) {
if (!(val % i)) {
return false;
}
}
return true;
}).length;
}
3중 반복문으로 nums에서 숫자 3가지를 골라 저장하였다.
sort한 배열을 stringify로 push하였고,
중복을 방지하기 위하여 includes()를 사용하였다(조건문이 길어짐..).
그리고 combiList를 map을 활용하여 reduce한 값으로 변환시켜주고,
filter로 소수만 걸러낸다.
소수를 판별하는 반복문에서,
약수를 모두 구할 필요는 없다.
i를 2부터 시작하여 값의 루트 값까지만 반복문을 진행하면 된다.
이렇게 걸러진 배열의 길이가 곧 정답이 된다.
다른 사람의 풀이
function primecheck(n){
for(var i=2;i<=Math.sqrt(n);i++){
if(n%i == 0){
return false;
}
}
return true;
}
function solution(nums){
var cnt = 0;
for(var i=0;i<nums.length-2;i++){
for(var j=i+1;j<nums.length-1;j++){
for(var w=j+1;w<nums.length;w++){
//console.log(nums[i]+"/"+nums[j]+"/"+nums[w]);
if(primecheck(nums[i]+nums[j]+nums[w])){
//console.log(nums[i]+nums[j]+nums[w]);
cnt++;
}
}
}
}
return cnt;
}
이분은 primecheck라는 함수를 따로 만들어서 나처럼 배열을 만들지 않고 그때 그때 함수를 적용시켰다.
3중 반복문은 배열에서 3개의 숫자를 골랐을 때 애초에 겹치는 값이 없도록 i, j, k의 범위를 정한 것이 눈에 띄었다.
반응형
'IT > Algorithm' 카테고리의 다른 글
프로그래머스) 약수의 개수와 덧셈 (0) | 2021.10.20 |
---|---|
프로그래머스) 나머지가 1이 되는 수 찾기 (0) | 2021.10.19 |
프로그래머스) 3진법 뒤집기 (0) | 2021.10.18 |
프로그래머스) 부족한 금액 계산하기 (0) | 2021.10.15 |
프로그래머스) 예산 (0) | 2021.10.14 |