728x90
https://programmers.co.kr/learn/courses/30/lessons/12977
문제
주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 return 하도록 solution 함수를 완성해주세요.
제한 사항
- nums에 들어있는 숫자의 개수는 3개 이상 50개 이하입니다.
- nums의 각 원소는 1 이상 1,000 이하의 자연수이며, 중복된 숫자가 들어있지 않습니다.
결괏값 예시
nums | result |
[1,2,3,4] | 1 |
[1,2,7,6,4] | 4 |
기본 제공 틀
function solution(nums) {
var answer = -1;
// [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
console.log('Hello Javascript')
return answer;
}
풀이 [JavaScript]
728x90
들어온 nums를 splice처리할거라 tmp에 복사본을 만들어주고, 첫번째 값을 first에 넣고 그 값을 tmp에서 제거해줍니다.
첫번째 숫자를 뺀 nums배열에서 나머지 두 값을 픽해야하기 때문에, tmp2에 첫번째 값을 제거한 수들을 넣어줍니다.
그리고, tmp2를 돌면서 중복되지 않게 splice를 해주면서 두번째, 세번째 값들을 numbers에 넣어줍니다.
그리고, numbers에 추가된 first, second. third값을 reduce함수를 사용하여 값을 다 더해준 배열을 만든 후, numbers를 돌면서 1으로는 어차피 다 나누어지므로, 2이상의 숫자부터 자기 자신의 숫자까지 돌면서 자기 자신의 숫자가 아닌 다른 숫자로 나누었을 때, 나머지가 0인 경우에는 numbers에서 제거해주었습니다. 그러면, numbers에는 소수만이 남게되고, 그 값을 리턴해주면 됩니다.
function solution(nums) {
var numbers = [];
var tmp = nums.filter(v => v);
for(var i=tmp.length-1; i>=0; i--){
var first = tmp[i];
var second = 0;
var third = 0;
tmp.splice(i, 1);
var tmp2 = tmp.filter(v=>v);
for(var j=tmp2.length-1; j>=0; j--){
second = tmp2[j];
tmp2.splice(j, 1);
for(var k=tmp2.length-1; k>=0; k--){
third = tmp2[k];
numbers.push([first, second, third]);
}
}
}
numbers = numbers.map(n => n.reduce((a, v) => a + v, 0));
for(var m=numbers.length-1; m>=0;m--){
for(var n=2; n<numbers[m]; n++){
if(numbers[m]%n ===0 && n !== numbers[m]){
numbers.splice(m, 1);
}
}
}
return numbers.length;
}
채점 결과 [JavaScript]
728x90
댓글