알고리즘

[조합] 블랙잭!

이채야채 2022. 1. 2. 22:51

연습삼아 3중 for문 말고 조합 공식에 대입해서 다른 풀이로 풀어본것.

 

function boringBlackjack(cards) {
  //소수 구하는 함수.
  function isPrime(num){
    if(num ===1){
      return false
    }
    for(let i=2; i<=num; i++){
      if(num%i ===0){
        if(i !== num){
          return false
        }
        return true;
      }
    }
  }
   let result = [];
const conbination = (arr, bucket, n) => {
      if (n === 0) {
        console.log(bucket);
        result.push(bucket)
        return;
      }
  
      for (let i = 0; i < arr.length; i++) {
        const choice = arr[i];
        const sliceArr = arr.slice();
        // 재귀
        conbination(sliceArr.slice(i + 1), bucket.concat(choice), n - 1);
      }
    }
  conbination(cards,[],3)
  let count = 0;
  for(let i=0; i<result.length;i++){
    let element = result[i].reduce((acc,cur)=>acc+Number(cur),0)
    if(isPrime(element))count++
  }
  return count;
}

 

3중 for문

function boringBlackjack(cards) {
  //소수 구하는 함수.
  function isPrime(num){
    if(num ===1){
      return false
    }
    for(let i=2; i<=num; i++){
      if(num%i ===0){
        if(i !== num){
          return false
        }
        return true;
      }
    }
  }
  //조합 3중
  let count =0;
  //하나뽑는다 => 그거 빼고 거기서 골라서 뽑음 => 다음거 뽑음
  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 num = cards[i] + cards[j] + cards[k]
        if(isPrime(num)) count++
      }
    }
  }

return count;
}

 

아래는 combnination 을 구하는 로직!

const conbination = (arr, bucket, n) => {
      if (n === 0) {
        console.log(bucket);
        return;
      }
  
      for (let i = 0; i < arr.length; i++) {
        const choice = arr[i];
        const sliceArr = arr.slice();
        // 재귀
        conbination(sliceArr.slice(i + 1), bucket.concat(choice), n - 1);
      }
    }