combinations-generator

혹여나 배열을 다루면서 2개 이상의 데이터를 뽑는 모든 경우의 수를 구하는 방법에 대해 고민해 본 적이 있을 것이다.

프로그래머스 문제를 통해 위 문제에 대한 궁금증을 해결해보자!

function primeCount(array) {
    //소수 판별 함수
    function isPrime(n) {
        for (let i = 2; i < n; i++) {
            if (n%i===0) return false
        }
        return true
    }

    let result = []; // 소수를 담을 배열
    
    // 중복되지 않게 array에서 3가지 수를 뽑는 함수
    for (let i = 0; i < array.length; i++) {
        for (let j = i + 1; j < array.length; j++) {
            for (let k = j + 1; k < array.length; k++) {
                let sum = array[i] + array[j] + array[k];
                if (isPrime(sum)) { // 뽑은 세 수의 합이 소수일때
                    if (!result.includes(sum)) result.push(sum) // 배열에 해당 소수값이 없다면 배열에 요소 추가
                }
            }
        }
    }
    return result.length
}

for문 중첩을 통해 배열에서 3개의 데이터를 뽑는 모든 경우의 수를 나열할 수 있었다.
하지만, 3개보다 그 수가 더 늘어난다면?

nodejs에서는 combinations-generator란 모듈을 지원하고 있다.
그 사용법은 아래와 같다.

var comb = require("combinations-generator");
function primeCount(array) {
    function isPrime(n) {
        if (n===2 || n===3) return true
        if (n%2===0) return false
        for (let i = 3; i < parseInt(n/2) + 1; i+=2) {
            if (n%i===0) return false
        }
        return true
    }
    let iterator = comb(array,3);
    let result = [];
    for (let item of iterator){
        let sum = item[0] + item[1] + item[2];
        if (isPrime(sum)) {
            if (!result.includes(sum)) result.push(sum)
        }
    };
    return result.length
}

좋은 웹페이지 즐겨찾기