평범한 블랙잭 게임에서 수시로 패배하자 흥미가 떨어진 김코딩은 박타짜에게 게임룰을 변형하여 새로운 카드 놀이를 해 볼 것을 제안합니다.
새로운 룰은 다음과 같습니다.
- 숫자로 이루어진 카드를 여러 장 받습니다.
- 3장씩 카드를 고르고, 3장에 적힌 숫자들의 합이 소수인지 확인합니다.
- 받아든 카드로 만들 수 있는 소수의 개수가 많은 사람이 이기게 됩니다.
예로, [1, 2, 3, 4]
라는 카드를 받았을 때 만들 수 있는 숫자는 6, 7, 8, 9이고, 소수는 7 하나이기 때문에 가지고 있는 소수의 개수는 1개입니다.
[2, 3, 4, 8, 13]
라는 카드를 받았을 때 만들 수 있는 숫자는 9, 13, 18, 14, 19, 23, 15, 20, 24, 25이고, 소수는 13, 19, 23 총 3개이기 때문에 가지고 있는 소수의 개수는 3개입니다.
게임을 진행하기 전에 소수에 대해 아무런 지식이 없는 박타짜는 게임을 며칠 미룬 뒤, 게임의 룰을 따르는 함수를 만들기로 했습니다.
소수에 약한 박타짜를 도와 여러 장의 카드 중 세 장씩 조합해 소수가 되는 경우의 수를 리턴하는 함수를 완성해 주세요.
let output = boringBlackjack([1, 2, 3, 4]);
console.log(output); // 1
let output = boringBlackjack([2, 3, 4, 8, 13]);
console.log(output); // 3
function boringBlackjack(cards) {
// TODO: 여기에 코드를 작성합니다.
// cards은 배열로 들어오고 길이가 50이하의 숫자로 들어오게 된다.
// 이중 3개의 카드를 뽑는다는것. 3개를 뽑았을 때 나오는 모든 경우의 수를 구하기.
// 숫자 3개의 조합이될테니 [1,2,3,4]에서 [1,1,2]처럼 중복되는 숫자는 나올 수 없고, [1,2,3],[3,2,1]과 같이 순서도 상관이 없을 것이다.
let count = 0
// 그럼 cards에 있는 모든 인덱스에 있는 값을 찾아보는게 좋지 않을까.
for(let i = 0 ; i < cards.length ; i++ ){
for(let j = i+1 ; j < cards.length ; j++ ){
for(let k = j+1 ; k < cards.length ; k++ ){
let result = cards[i]+cards[j]+cards[k]
if(isPrime(result)){
count++;
}
}
}
}
function isPrime(some){
for(let i = 2; i <= Math.floor(Math.sqrt(some)); i++){
if(some % i === 0){
return false
}
}
return true
}
return count
}