[プログラマー]小数JavaScriptを求める
9900 ワード
問題の説明
与えられた数字のうち3つの数字を小数に加算すると、個数を求めてみます.数値を持つ配列numsをパラメータとする場合は、solution関数を完了してnumsの3つの異なる数値の小数を返します.
せいげんじょうけん
I/O例
I/O例説明
I/O例#1
[1,2,4]を使用して7を作成できます.
I/O例#2
[1,2,4]を使用して7を作成できます.
[1,4,6]を使用して11を作成できます.
[2,4,7]は、13を作成するために使用することができる.
[4,6,7]を使用して17を作成できます.
コンポジット
問題を読み始めたばかりの頃は「簡単ですよね?」思いついた.でも思ったよりもっとまずはグループ!配列から3つの組み合わせを選ぶことを考えます.
const getCombinations = function (arr, selectNumber) {
const results = [];
if (selectNumber === 1) return arr.map((el) => [el]);
// n개중에서 1개 선택할 때(nC1), 바로 모든 배열의 원소 return
arr.forEach((fixed, index, origin) => {
const rest = origin.slice(index + 1);
// 해당하는 fixed를 제외한 나머지 뒤
const combinations = getCombinations(rest, selectNumber - 1);
// 나머지에 대해서 조합을 구한다.
const attached = combinations.map((el) => [fixed, ...el]);
// 돌아온 조합에 떼 놓은(fixed) 값 붙이기
results.push(...attached);
// 배열 spread syntax 로 모두다 push
});
return results; // 결과 담긴 results return
}
JavaScriptシーケンスとの組合せベルログを参照してください.上手に書かれていると思われるコードから、
map()
を積極的に使用しています.小数点を検索
isPrimeは実は何度も質問をしたことがあります.
function isPrime(num) {
// 소수는 1과 자기 자신만으로만 나누어 떨어지는 수 임으로
// num > i
for(let i = 2; num > i; i++) {
if(num % i === 0) { //이 부분에서 num이 다른 수로 나눠떨어진다면 소수가 아님
return false;
}
}
// 소수는 1보다 큰 정수임으로
// 1보다 작으면 false를 리턴한다
return num > 1;
}
solution
このように私が最終的に制定した解決策は以下の通りです.組合せを使用して3つの要素の配列をresult配列に挿入し、count変数を宣言します.次にresult配列の長さfor文に従って、要素の和をsum 1に配置します.またsum 1が少数であればcountプラス1は比較的容易なアルゴリズムである.
function solution(nums) {
const result = getCombinations(nums, 3);
let count = 0;
for(let i=0;i<result.length;i++){
let sum1 = result[i].reduce((sum2, currValue) => {
return sum2 + currValue;
});
if(isPrime(sum1)){
count += 1;
}
}
return count;
}
Reference
この問題について([プログラマー]小数JavaScriptを求める), 我々は、より多くの情報をここで見つけました https://velog.io/@shinwonse/프로그래머스-소수-구하기-JavaScriptテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol