개발/Algorithm

[leetcode]1630. Arithmetic Subarrays

개발 여행 2022. 3. 29. 10:00
728x90

leetcode 1630. Arithmetic Subarrays

 

Arithmetic Subarrays - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 

[ 문제 풀이 ]

매개변수 nums, l, r가 주어질 때, 각 원소의 차이가 모두 일정한지 boolean형의 element가 담긴 list를 리턴하는 문제이다.

nums는 숫자를 담고 있는 배열, l은 시작 인덱스를 담고 있는 배열, r은 끝 인덱스를 담고 있는 배열이다.

 

예를 들어 매개변수가 아래와 같을 때,

nums = [4,6,5,9,3,7], l = [0,0,2], r = [2,3,5]

nums 배열에서 0(l[0]) ~ 2(r[0])까지의 배열 [4, 6, 5]는 [6, 5, 4]로 재배열 할 수 있고, 각 원소는 1씩 차이나므로 true,

nums 배열에서 0(l[1]) ~ 3(r[1])까지의 배열 [4, 6, 5, 9]는 각 원소의 차이가 달라 재배치할 수 없으므로 false,

nums 배열에서 0(l[2]) ~ 3(r[5])까지의 배열 [5, 9, 3, 7]은 [3, 5, 7, 9]로 재배치 할 수 있고, 각 원소는 2씩 차이나므로 true,

따라서 [true, false, true]를 리턴하면 된다.

 

[ 코드 ]

/**
 * @param {number[]} nums
 * @param {number[]} l
 * @param {number[]} r
 * @return {boolean[]}
 */
const checkArithmeticSubarrays = function(nums, l, r) {
  const chechArithmetic = (arr) => {
    const diff = arr[1] - arr[0];

    for (let i = 2; i < arr.length; i++) {
      const currentDiff = arr[i] - arr[i - 1];

      if (currentDiff !== diff) {
        return false;
      }

      return true;
    }
  };

  return l.map((_, i) =>
    chechArithmetic(nums.slice(l[i], r[i] + 1).sort((a, b) => a - b))
  );
};

 

728x90