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

JavaScript로 배열에서 연속된 숫자 쌍의 개수 구하기

문제 이해하기

정수로 이루어진 배열을 입력받아, 배열 안에서 연속된 숫자(1씩 차이 나는 수)로 이루어진 인접 쌍의 개수를 반환하는 JavaScript 함수를 작성해야 합니다.

여기서 '연속된 숫자'란 두 수의 차이가 정확히 1인 경우를 의미합니다. 예를 들어 (1, 2), (-4, -3), (7, 6)처럼 서로 1만큼 차이 나는 쌍을 찾아 그 개수를 세면 됩니다.

예제 코드

const arr = [1, 2, 5, 8, -4, -3, 7, 6, 5];

const countPairs = (arr = []) => {
  let count = 0;
  for (let i = 0; i < arr.length; i += 2){
    if (arr[i] - 1 === arr[i + 1] || arr[i] + 1 === arr[i + 1]){
      count++;
    }
  }
  return count;
};

console.log(countPairs(arr));

출력 결과

3

코드 동작 원리

위 코드의 작동 방식을 단계별로 살펴보겠습니다.

  • 쌍 만들기: for 루프에서 인덱스를 2씩 증가시켜(i += 2) 배열을 처음부터 두 요소씩 묶어 하나의 쌍으로 처리합니다.
  • 연속 여부 확인: 각 쌍에 대해 첫 번째 요소에서 1을 뺀 값 또는 1을 더한 값이 두 번째 요소와 같은지 검사합니다. 두 조건 중 하나라도 참이면 해당 쌍은 연속된 숫자입니다.
  • 카운트 증가: 조건을 만족할 때마다 count 변수를 1씩 증가시키고, 마지막에 최종 개수를 반환합니다.

예제 배열 분석

배열 [1, 2, 5, 8, -4, -3, 7, 6, 5]에서는 다음과 같은 쌍이 형성됩니다.

  • (1, 2) → 연속됨 ✓
  • (5, 8) → 연속되지 않음 ✗
  • (-4, -3) → 연속됨 ✓
  • (7, 6) → 연속됨 ✓

마지막 요소 5는 짝이 없으므로 제외되며, 따라서 최종 결과는 3이 됩니다. 시간 복잡도는 O(n)으로, 배열을 한 번만 순회하므로 매우 효율적입니다.