문제) 주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 return 하도록 solution 함수를 완성해주세요.
function solution(nums) {
let answer=0;
let a=0;
let count=0;
for(let i=0;i<nums.length;i++){
for(let j=i+1;j<nums.length;j++){
for(let t=j+1;t<nums.length;t++){
a=nums[i]+nums[j]+nums[t];
count=0;
for(let b=1;b<=a;b++){
if(a%b===0){
count+=1;
}
}
if(count===2){
console.log("[",nums[i],",",nums[j],",",nums[t],"]를 이용해서 ",a,"를 만들 수 있습니다.");
answer+=1;
}
}
}
}
return answer;
}
3중 반복문을 통해서 우선 숫자 3개를 뽑는다. 그리고 그 숫자들을 합한 값을 a안에 넣고 a가 소수인지 구분해주기 위해 반복문을 한 번 더 사용해 a를 b로 나누었을 때 나머지가 0이면 count수를 늘려주고 count가 2인 숫자들만 소수이므로 그 때 answer를 하나씩 늘려준다.
반복문을 4중으로 사용을 해서 살짝 찝찝하긴 했으나 다른 사람들의 답안 코드를 보았을 때도 4중 반복문을 사용한 사람들이 있었다. (아닌 코드들은 지금 나의 자스 실력으로 이해하기에는 어려웠다..ㅠ)
아래에는 같이 스터디하는 오빠의 코드이다! 나와는 다른 방식으로 풀었고 더 시간소요가 적어서 첨부한다. 여기에서 추가로 루트와 마지막 반복문에 break를 사용하면 더 시간이 단축된다.
peterpppp's velog
굿굿 굿이에요!