[LeetCode] Can Make Arithmetic Progression From Sequence

준규·2023년 4월 2일
0

1.문제


A sequence of numbers is called an arithmetic progression if the difference between any two consecutive elements is the same.

Given an array of numbers arr, return true if the array can be rearranged to form an arithmetic progression. Otherwise, return false.


정수 배열 arr이 주어질 때 어느 두개의 인접한 숫자의 차이가 모두 같은지 판별하는 문제이다.


Example 1

Input: arr = [3,5,1]
Output: true
Explanation: We can reorder the elements as [1,3,5] or [5,3,1] with differences 2 and -2 respectively, between each consecutive elements.

Example 2

Input: arr = [1,2,4]
Output: false
Explanation: There is no way to reorder the elements to obtain an arithmetic progression.

Constraints:

  • 2 <= arr.length <= 1000
  • -10^6 <= arr[i] <= 10^6

2.풀이

  1. 배열을 오름차순으로 정렬한다.
  2. 배열의 인접한 두 숫자의 차이를 구한다.
  3. 정렬된 배열을 순회하면서 모든 인접한 두 요소가 차이가 동일한지 체크한다.

/**
 * @param {number[]} arr
 * @return {boolean}
 */
const canMakeArithmeticProgression = function (arr) {
  // 배열을 오름차순으로 정렬하고 인접한 두 요소의 차이를 구한다.
  arr.sort((a, b) => a - b);
  const diff = arr[1] - arr[0];

  // 정렬된 배열을 순회하면서 인접한 두 값의 차이가 diff와 같은지 체크한다
  for (let i = 1; i < arr.length - 1; i++) {
    if (arr[i + 1] - arr[i] !== diff) {
      return false;
    }
  }

  return true;
};

3.결과

profile
안녕하세요 :)

0개의 댓글