programmer-小数点を作成する
31203 ワード
問題の説明
与えられた数字のうち3つの数字を小数に加算すると、個数を求めてみます.数値を持つ配列numsをパラメータとする場合は、solution関数を完了してnumsの3つの異なる数値の小数を返します.
せいげんじょうけん
∙numsの数字の個数は3個以上50個以下です.
∙numsの各要素は1または1000以下の自然数であり、重複する数字は含まれません.
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を作成できます.
function solution(nums) {
let answer = [];
let combinations = [];
let i = 0;
while( i < nums.length){
for( let j = i + 1; j < nums.length; j++){
for(let x = j + 1; x < nums.length; x++ ){
if(combinations.indexOf( nums[i] + nums[j] + nums[x] ) < 0){
combinations.push(nums[i] + nums[j] + nums[x]);
}
}
}
i++;
}
for(let x = 0; x < combinations.length; x++){
let count = 0;
for(let y = 1; y <= combinations[x]; y++ ){
if( combinations[x] % y === 0){
count++;
}
}
if(count === 2){
answer.push(combinations[x]);
}
}
return answer.length;
}
3つの複文を回し,できるだけ多くの3桁の組合せを求める.しかし,3桁の症例が1,2個出現したため,精度は悪かった.重複する数字はないので,組合せ配列にindexOfを書き込む必要はない.function solution(nums) {
let answer = [];
let combinations = [];
let i = 0;
while( i < nums.length){
for( let j = i + 1; j < nums.length; j++){
for(let x = j + 1; x < nums.length; x++ ){
combinations.push(nums[i] + nums[j] + nums[x]);
}
}
i++;
}
for(let x = 0; x < combinations.length; x++){
let count = 0;
for(let y = 1; y <= combinations[x]; y++ ){
if( combinations[x] % y === 0){
count++;
}
}
if(count === 2){
answer.push(combinations[x]);
}
}
return answer.length;
}
次に、これに似ていますが、演算時間が短い別の人の答えを示します.function solution(nums){
let count = 0;
let temp = [];
for(let i = 0; i < nums.length; i++){
for(let j = i + 1; j < nums.length; j++){
for(let k = j + 1; k < nums.length; k++){
let sum = nums[i] + nums[j] + nums[k];
temp.push(sum);
}
}
}
for(let l = 0; l < temp.length; l++){
if(primeNumber(temp[l])){
count++;
}
}
return count;
}
function primeNumber(nums){
for(let i = 2; i * i <= nums; i++){
if(nums % i === 0) return false;
}
return true;
} // 소수판별 함수 버전1 => N의 약수는 제곱근 N의 범위에 존재
function primeNumber(nums){
let count = 0;
for(let i = 1; i <= nums; i++){
if(nums % i === 0) count++;
}
if(count === 2){
return true;
}else if( count > 2){
return false;
}
} // 소수판별 함수 버전2 => 기존에 알았던 방식
参照)https://velog.io/@diddnjs 02/エンコードテストプログラマー-小数-作成
https://jm-park.github.io/algorithm/2018/08/06/Prime-Number(小数)-判別法-アルゴリズム。html
+) python version
def solution(nums):
answer = []
combinations = []
i = 0
while i < len(nums):
for j in range(i + 1, len(nums)):
for x in range(j + 1, len(nums)):
combinations.append(nums[i] + nums[j] + nums[x])
i += 1
for x in range(0, len(combinations)):
count = 0
for y in range(1, combinations[x] + 1):
if combinations[x] % y == 0:
count += 1
if count == 2:
answer.append(combinations[x])
return len(answer)
from itertools import combinations
def check(a, b, c):
total = a + b + c
for i in range(2, total):
if total % i == 0 : return False
return True
def solution(nums):
answer = 0
A = list(combinations(nums, 3))
for i in A:
if check(i[0], i[1], i[2]): answer += 1
return answer
from itertools import combinations
import math
def solution(nums):
candidates = combinations(nums, 3)
answer = 0
for item in candidates:
sums = sum(item)
is_prime = True
for i in range(2, int(math.sqrt(sums)) + 1): // N의 약수는 해당 제곱근 범위에 있음
if sums % i == 0:
is_prime = False
break
if is_prime:
answer += 1
return answer
参照)https://eda-ai-lab.tistory.com/493
https://inspirit941.tistory.com/entry/Python-プログラマ-小数-作成-レベル-2
Reference
この問題について(programmer-小数点を作成する), 我々は、より多くの情報をここで見つけました https://velog.io/@skkfea07/programmers-소수-만들기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol