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

JavaScript로 특정 합계를 만족하는 연속 요소 쌍의 인덱스 찾기

문제 정의

배열과 하나의 숫자를 입력받아, 배열 안에서 인접한 두 요소의 합이 주어진 숫자와 일치하는 첫 번째 쌍을 찾고, 그 쌍 중 첫 번째 요소의 인덱스를 반환하는 함수를 작성해야 합니다.

만약 조건을 만족하는 쌍이 배열에 존재하지 않는다면 -1을 반환하도록 구현합니다.

여기서 말하는 '쌍(pair)'은 배열에서 임의로 선택된 두 요소가 아니라, 서로 붙어 있는(연속된) 두 요소를 의미한다는 점에 유의하세요. 즉, arr[i]와 arr[i+1]의 관계만 검사하게 됩니다.

구현 코드

이 로직은 간단한 반복문으로 해결할 수 있습니다. 배열을 처음부터 끝까지 순회하면서 현재 요소와 다음 요소의 합을 목표값과 비교하고, 일치하는 지점에서 즉시 인덱스를 반환합니다.

const arr = [4, 8, 2, 7, 6, 42, 41, 77, 32, 9];

const findPair = (arr, num) => {
  for(let i = 0; i < arr.length; i++){
    if(arr[i] + arr[i+1] === num){
      return i;
    }
  };
  return -1;
};

console.log(findPair(arr, 13));
console.log(findPair(arr, 48));
console.log(findPair(arr, 45));

동작 원리

함수의 작동 방식은 다음과 같습니다.

- 인덱스 0부터 배열 길이까지 순회하면서 arr[i] + arr[i+1]이 num과 같은지 확인합니다.
- 조건을 만족하는 위치를 발견하면 해당 인덱스 i를 즉시 반환합니다.
- 반복문이 끝날 때까지 일치하는 쌍을 찾지 못했다면 -1을 반환합니다.

출력 결과

위 코드를 실행하면 콘솔에 다음과 같은 결과가 출력됩니다.

3
4
-1

각 결과의 근거는 아래와 같습니다.

- findPair(arr, 13): arr[3] + arr[4] = 7 + 6 = 13이므로 인덱스 3을 반환합니다.
- findPair(arr, 48): arr[4] + arr[5] = 6 + 42 = 48이므로 인덱스 4를 반환합니다.
- findPair(arr, 45): 합이 45가 되는 인접한 쌍이 없으므로 -1을 반환합니다.

이 알고리즘은 배열을 한 번만 순회하므로 시간 복잡도는 O(n)입니다. 단순 선형 탐색으로 문제를 해결하는 전형적인 패턴이며, 인접 요소 기반 조건 검사가 필요한 다양한 상황에 응용할 수 있습니다.