문제
Given two n x n binary matrices mat and target, return true if it is possible to make mat equal to target by rotating mat in 90-degree increments, or false otherwise.
두 개의 n x n 이진 행렬 매트와 타겟이 주어지면 매트를 90도 단위로 회전시켜 표적으로 동일하게 만들 수 있으면 true를 반환하고 그렇지 않으면 false를 반환합니다.
예시
Example 1:
Input: mat = [[0,1],[1,0]], target = [[1,0],[0,1]]
Output: true
Explanation: We can rotate mat 90 degrees clockwise to make mat equal target.
Example 2:
Input: mat = [[0,1],[1,1]], target = [[1,0],[0,1]]
Output: false
Explanation: It is impossible to make mat equal to target by rotating mat.
Example 3:
Input: mat = [[0,0,0],[0,1,0],[1,1,1]], target = [[1,1,1],[0,1,0],[0,0,0]]
Output: true
Explanation: We can rotate mat 90 degrees clockwise two times to make mat equal target.
제약 조건
Constraints:
- n == mat.length == target.length
- n == mat[i].length == target[i].length
- 1 <= n <= 10
- mat[i][j] and target[i][j] are either 0 or 1.
해결 과정
- width와 height를 설정한다. 이때 mat와 target의 width, height는 동일하다.
- matrix를 90도로 돌린다면 총 4가지의 경우의 수가 있다. 경우의 수들에 대한 변수를 만든다.
- 이중 for문을 돌며 matrix와 target 요소에 접근한다.
- mat[i][j]와 target[i][j]와 비교하는 것은 90도로 돌아가지 않은, 제자리에서 비교하는 것이다.
- 만약 값이 같지 않다면 normal에 false를 할당한다.
- mat[i][j]와 taret[j][width-1-i]를 비교하는 것은 90도로 한 번 돌아간 것과 비교하는 것이다.
- 만약 값이 같지 않다면 rightOneTime에 false를 할당한다.
- mat[i][j]와 taret[height-1-i][width-1-j]를 비교하는 것은 90도로 두 번 돌아간 것과 비교하는 것이다.
- 만약 값이 같지 않다면 rightTwoTime에 false를 할당한다.
- mat[i][j]와 taret[height-1-j][i]를 비교하는 것은 90도로 세 번 돌아간 것과 비교하는 것이다.
- 만약 값이 같지 않다면 rightThreeTime에 false를 할당한다.
- mat[i][j]와 target[i][j]와 비교하는 것은 90도로 돌아가지 않은, 제자리에서 비교하는 것이다.
- normal, rightOneTime, rightTwoTime, rightThreeTime 중 하나라도 true가 있다면 true를 반환한다.
해결 코드
/**
* @param {number[][]} mat
* @param {number[][]} target
* @return {boolean}
*/
var findRotation = function(mat, target) {
let width = mat[0].length;
let height = mat.length;
let normal = true;
let rightOneTime = true;
let rightTwoTimes = true;
let rightThreeTimes = true;
for (let i = 0; i < height; i++) {
for (let j = 0; j < width; j++) {
// don't rotate mat
if (mat[i][j] !== target[i][j]) {
normal = false;
}
// rotate mat right 1 time
if (mat[i][j] !== target[j][width - 1 - i]) {
rightOneTime = false;
}
// rotate mat right 2 times
if (mat[i][j] !== target[height - 1 - i][width - 1 - j]) {
rightTwoTimes = false;
}
// rotate mat right 3 times
if (mat[i][j] !== target[height - 1 - j][i]) {
rightThreeTimes = false;
}
}
}
return normal || rightOneTime || rightTwoTimes || rightThreeTimes;
};
'leetCode' 카테고리의 다른 글
[Medium] 973. K Closest Points to Origin (0) | 2022.07.01 |
---|---|
[Medium] Spiral Matrix (0) | 2022.07.01 |
[Medium] Rotate Image (0) | 2022.06.30 |
[Easy] 58. Length of Last Word (0) | 2022.06.17 |
[Medium] 739. Daily Temperatures (0) | 2022.06.17 |
Comment