[LeetCode] Make Two Arrays Equal by Reversing Subarrays

준규·2023년 1월 25일
0

1.문제


You are given two integer arrays of equal length target and arr. In one step, you can select any non-empty subarray of arr and reverse it. You are allowed to make any number of steps.

Return true if you can make arr equal to target or false otherwise.


두개의 길이가 같은 정수 배열 target과 arr가 주어질 때 target 배열에서 길이가 0이 아닌 무작위의 subarray를 선택해서 뒤집는 연산을 했을때 target과 arr가 같은 배열이 될 수 있으면 true를 아니라면 false를 리턴하는 문제이다.


Example 1

Input: target = [1,2,3,4], arr = [2,4,1,3]
Output: true
Explanation: You can follow the next steps to convert arr to target:
1- Reverse subarray [2,4,1], arr becomes [1,4,2,3]
2- Reverse subarray [4,2], arr becomes [1,2,4,3]
3- Reverse subarray [4,3], arr becomes [1,2,3,4]
There are multiple ways to convert arr to target, this is not the only way to do so.

Example 2

Input: target = [7], arr = [7]
Output: true
Explanation: arr is equal to target without any reverses.

Example 3

Input: target = [3,7,9], arr = [3,7,11]
Output: false
Explanation: arr does not have value 9 and it can never be converted to target.

Constraints:

  • target.length == arr.length
  • 1 <= target.length <= 1000
  • 1 <= target[i] <= 1000
  • 1 <= arr[i] <= 1000

2.풀이

  1. 두 배열의 요소들 중 두 배열에 모두 포함되지 않고 한쪽에만 포함되는 숫자가 있는경우는 false이다.
  2. 두 배열의 요소가 동일하다면 연산을 통해 같은 배열이 될 수 있다.

/**
 * @param {number[]} target
 * @param {number[]} arr
 * @return {boolean}
 */
const canBeEqual = function (target, arr) {
  // 주어진 배열들을 정렬한다.
  const sortedTarget = target.sort((a, b) => a - b);
  const sortedArray = arr.sort((a, b) => a - b);

  // 정렬된 배열들의 요소가 다르면 false 를 리턴
  for (let i = 0; i < sortedTarget.length; i++) {
    if (sortedTarget[i] !== sortedArray[i]) return false;
  }

  return true;
};

3.결과

profile
안녕하세요 :)

0개의 댓글