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

JavaScript로 범위 내 모든 정수 쌍 생성하기

문제 소개

이번 글에서는 숫자 n을 입력받아, 다음 조건을 만족하는 정수 쌍 [a, b]를 배열 형태로 생성하는 JavaScript 함수를 작성해 보겠습니다.

0 <= a <= b <= n

즉, 0부터 n까지의 범위 안에서 첫 번째 값(a)이 두 번째 값(b)보다 작거나 같은 모든 조합을 찾아내는 것이 목표입니다.

해결 방법

가장 직관적인 접근 방식은 중첩 반복문(nested loop)을 사용하는 것입니다.

  • 바깥쪽 반복문은 a 값을 0부터 n까지 순회합니다.
  • 안쪽 반복문은 b 값을 현재 a부터 n까지 순회합니다.
  • 각 단계에서 [a, b] 쌍을 만들어 결과 배열에 추가합니다.

안쪽 반복문의 시작점을 i(현재 a 값)로 설정하면 자동으로 a ≤ b 조건이 충족되므로, 별도의 비교 연산 없이 중복 없는 쌍을 효율적으로 생성할 수 있습니다.

코드 구현

다음은 위 로직을 구현한 전체 코드입니다.

const num = 4;

const findPairs = (n = 1) => {
    const arr = [];
    for(let i = 0; i <= n; i++){
        for(let j = i; j <= n; j++){
            let temp = [];
            temp.push(i, j);
            arr.push(temp);
        };
    };
    return arr;
};

console.log(findPairs(num));

실행 결과

n = 4일 때 함수를 실행하면 아래와 같이 총 15개의 쌍이 출력됩니다.

[
  [ 0, 0 ], [ 0, 1 ],
  [ 0, 2 ], [ 0, 3 ],
  [ 0, 4 ], [ 1, 1 ],
  [ 1, 2 ], [ 1, 3 ],
  [ 1, 4 ], [ 2, 2 ],
  [ 2, 3 ], [ 2, 4 ],
  [ 3, 3 ], [ 3, 4 ],
  [ 4, 4 ]
]

동작 원리 살펴보기

결과 배열에는 같은 숫자로 이루어진 쌍([0, 0], [1, 1] 등)도 포함되어 있습니다. 이는 조건이 a ≤ b이기 때문으로, 두 값이 같아도 허용됩니다.

생성되는 쌍의 개수는 수학적으로 (n + 1)(n + 2) / 2 공식으로 계산할 수 있으며, 이는 중복 조합(combination with repetition)의 개수와 일치합니다. 예를 들어 n = 4인 경우 (5 × 6) / 2 = 15개의 쌍이 생성됩니다.

마무리

이처럼 중첩 반복문과 시작 인덱스 조정만으로 범위 내 모든 정수 쌍을 간단하게 생성할 수 있습니다. 이 패턴은 좌표 조합 생성, 브루트 포스 알고리즘, 테스트 케이스 생성 등 다양한 상황에서 유용하게 활용될 수 있습니다.