두 개의 정수 배열인 target과 arr가 주어졌습니다. 두 배열의 길이는 같습니다. 한 번에 arr의 비어있지 않은 하위 배열을 선택하여 뒤집을 수 있습니다. 원하는 만큼 많은 단계를 수행할 수 있습니다.
arr을 target으로 변환할 수 있다면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
예시 1:
Input: target = [1,2,3,4], arr = [2,4,1,3]
Output: true
Explanation: arr을 target으로 변환하기 위해 다음 단계를 수행할 수 있습니다:
1- 하위 배열 [2,4,1]을 뒤집어, arr은 [1,4,2,3]이 됩니다.
2- 하위 배열 [4,2]을 뒤집어, arr은 [1,2,4,3]이 됩니다.
3- 하위 배열 [4,3]을 뒤집어, arr은 [1,2,3,4]가 됩니다.
arr을 target으로 변환할 수 있는 여러 방법이 있습니다. 이것이 유일한 방법은 아닙니다.
예시 2:
입력: target = [7], arr = [7]
출력: true
설명: arr을 뒤집지 않고 target과 동일하다.
예시 3:
입력: target = [3,7,9], arr = [3,7,11]
출력: false
설명: arr에는 값 9가 없고, target으로 변환할 수 없다.
제약 조건:
- target.length == arr.length
- 1 ≤ target.length ≤ 1000
- 1 ≤ target[i] ≤ 1000
- 1 ≤ arr[i] ≤ 1000
이 문제는 arr과 target이 동일한 요소를 포함하고 있는지에 따라 결정됩니다. 이를 판단하기 위해 두 배열을 정렬할 수 있습니다. 배열이 동일한 요소를 포함하면 정렬된 버전도 동일해야 합니다. 그렇지 않으면 정렬된 버전에서 적어도 하나의 값이 일부 색인 i에서 다르게 나타날 것입니다.
class Solution {
public boolean canBeEqual(int[] target, int[] arr) {
Arrays.sort(target);
Arrays.sort(arr);
for(int i=0; i < target.length; i++){
if(arr[i] != target[i]) return false;
}
return true;
}
}
function canBeEqual(target: number[], arr: number[]): boolean {
target.sort((a, b) => a - b);
arr.sort((a, b) => a - b);
for (let i = 0; i < target.length; i++) {
if (target[i] != arr[i]) return false;
}
return true;
}
배열 target 및 arr의 크기를 N이라고 합시다.
시간 복잡도: O(N⋅logN)
공간 복잡도: O(logN)