배열에서 짝을 이루는 평균값 구하기

GonnabeAlright·2022년 4월 14일
0
post-thumbnail
post-custom-banner

averagePair 함수는 arr과 num을 인수로 전달받습니다. arr은 배열이고 num은 arr의 요소 중 두 개의 요소의 평균값을 의미합니다. 따라서 인수로 전달받은 arr의 요소 중 두 개의 요소의 평균값이 num과 일치할 경우 true를 반환하고 그렇지 않을 경우 false를 반환합니다.

제약조건

시간복잡도: O(N)
공간복잡도: O(1)

배열을 순회하는 중 배열의 첫번째 요소와 마지막 요소를 더하여 2로 나누어 평균값을 구하고 만약 이 평균값이 num과 일치한다면 true를 반환합니다. arr[1, 2, 3, 4, 5, 6], num2로 가정한다면, 1과 6의 평균값3.5로 2보다 큽니다. 이 경우 평균값이 더 크므로 2의 근접한 값을 산출하기 위해서는 평균값을 낮춰야 하는데 평균값을 낮추기 위해서 합계를 낮춰주는 방식을 사용하여 반복문 안 조건을 구성합니다. 즉, 합계를 낮추기 위해서는 큰 값을 낮춰야 하므로 6을 5로 바꾸어주어야 합니다. 반대의 경우 1을 2로 바꾸어 줍니다.

결과

'ust strict'

const averagePair = (arr, num) => {
  let start = 0;
  let end = arr.length - 1;
  
  while (start < end) {
    let avg = (arr[start] + arr[end]) / 2;
    if (avg === num) return true;
    else if (avg < num) start++;
    else end--;
  }
  return false;
}

averagePair([1, 2, 3], 2);
averagePair([1, 3, 3, 5, 6, 7, 10, 12, 19], 8);
averagePair([-1, 0, 3, 4, 5, 6], 2.5);

리뷰

  1. 배열 요소의 위치(index)를 나타내는 변수 startend를 선언 및 초기화합니다.
  2. 배열의 첫번째 요소의 인덱스는 0이므로 start는 0으로, end는 배열의 마지막 인덱스인 arr.length - 1으로 초기화합니다.
  3. start의 값이 end의 값보다 작을 경우 계속해서 반복문을 진행합니다.
  4. 평균값을 나타내는 지역변수 avg에 arr[start]arr[end] 값을 더하고 2로 나누어 줍니다.
  5. avg와 num의 값이 동일할 경우 true를 반환하고 앞서 설명한 원리대로 평균값이 num보다 작으므로 배열의 첫번째 요소를 나타내는 인덱스를 증가시켜주고 그렇지 않을 경우 배열의 마지막 요소를 나타내는 인덱스를 감소시켜줍니다.
  6. 반복문을 모두 순회하면서 평균값과 num이 일치하지 않았으므로 false를 반환합니다.
post-custom-banner

0개의 댓글