

function solution(nums) {
var answer = 0;
const primeNumber = (n) =>{
for (let i = 2 ; i <= Math.sqrt(n) ; i++){
if(n % i === 0 ) {
return false
}
}
return true
}
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 count = nums[i]+nums[j]+nums[k]
if(primeNumber(count)){
answer++
}
}
}
}
return answer;
}
배열 nums에서 임의의 3개의 숫자를 더했을때 소수인가 아닌가 를 판별하는 문제
우선 임의의 3개의 숫자를 선택?해야하는데
for문을 써서 해결했다.
첫번째는 i= 0 즉 0번째 인덱스 부터 시작
두번째부터는 i + 1 , j + 1 이런식으로 시작숫자를 지정해서 겹치는 일이 없게 했다.
그리고 세숫자를 더한값이 소수인지 아닌지를 판별해야하는데
Math.sqrt()를 쓰면 소수를 쉽게 구할수있다.
전에 코딩테스트 문제를 풀때 사용한적이있었는데 제곱근을 씌운다 생각하면 된다.
예를들어 더한 숫자가 25라면 5가 나올것이다.
그 후엔 함수를 선언한 뒤 소수를 판별하면 된다.
하지만 0, 1은 예외 처리를 해야하기때문에 반복문을 써서 시작 숫자가 2부터 시작하게끔 설정했고
소수는 1과 자기자신을 제외하곤 나누어 떨어지는 값이 없기 때문에 나머지가 한번이라도 없다면 false를
만약 반복문을 다 돌렸는데 조건문에 해당하는 값이 없다면 true를 리턴하게했다.
그럼 이제 소수인지 아닌지 판별한 뒤 참이라면 answer에 1을 더하면된다.
처음엔 primeNumber를 바로 생각한게 아니였어서 for문 밑에 썼는데 에러가 떴다.
곰곰히 생각해보니 위에서 아래로 코드가 실행이 된다고 생각하면 위에서 먼저 primeNumber를 호출하는데 그땐 primeNumber란게 아직 메모리에 저장이 안됐을거같다 란생각을 했고 위로 옮기니 제대로 실행이 됐다.