Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript에서 집합의 모든 부분집합을 찾는 방법

JavaScript에서 집합의 모든 부분집합 찾기

JavaScript에서 집합(set)의 모든 부분집합을 구하려면 reduce()map() 메서드를 함께 활용하면 됩니다. 이 방식은 배열의 각 요소를 순회하면서 기존에 만들어진 부분집합들에 새로운 요소를 추가한 조합을 점차 확장해 나가는 원리로 동작합니다.

예를 들어, [8, 9]라는 배열이 주어졌을 때 모든 부분집합을 구하는 과정을 살펴보겠습니다.

예제 코드

const findAllSubsetsoOfGivenSet =
originalArrayValue => originalArrayValue.reduce(
    (givenSet, setValue) => givenSet.concat(
        givenSet.map(givenSet => [setValue,...givenSet])
    ),
[[]]
);
console.log(findAllSubsetsoOfGivenSet([8,9]));

위 코드가 동작하는 방식을 단계별로 정리하면 다음과 같습니다.

  • 초기값 [[]]: 빈 배열 하나를 포함하는 배열에서 시작합니다. 공집합도 부분집합에 포함되기 때문입니다.
  • 첫 번째 요소 8 처리: 기존 결과([])에 8을 추가한 [8]을 새로 생성하여 [[], [8]]이 됩니다.
  • 두 번째 요소 9 처리: 기존 결과([], [8]) 각각에 9를 추가해 [9], [9, 8]을 만들고, 최종적으로 [[], [8], [9], [9, 8]]이 완성됩니다.

프로그램 실행 방법

위 프로그램을 실행하려면 터미널에서 다음 명령어를 입력합니다.

node fileName.js

여기서는 파일 이름이 demo36.js라고 가정하겠습니다.

출력 결과

프로그램을 실행하면 아래와 같은 결과가 출력됩니다.

PS C:\Users\Amit\JavaScript-code> node demo36.js
[ [], [ 8 ], [ 9 ], [ 9, 8 ] ]

실행 결과를 보면 빈 배열을 포함해 총 4개의 부분집합이 생성된 것을 확인할 수 있습니다. 요소가 n개인 집합의 부분집합 개수는 항상 2ⁿ개이므로, 요소가 2개인 경우 2² = 4개의 부분집합이 만들어지는 것입니다.