문제파악 및 재정의
X-Matrix 조건을 만족하면 True 아니면 False를 반환하라.
다음 조건이 모두 충족되는 경우 정사각형 행렬을 X-행렬이라고 합니다.
행렬의 대각선에 있는 모든 요소는 0이 아닙니다.
다른 모든 요소는 0입니다.
정사각형 행렬을 나타내는 n x n 크기의 2D 정수 배열 그리드가 주어지면
그리드가 X-매트릭스이면 true를 반환합니다. 그렇지 않으면 false를 반환합니다.
자료구조 및 알고리즘 선택
i j i j i j i j
[0][0] 2 | [1][0] 0 | [2][0] 0 | [3][0] 4
[0][1] 0 | [1][1] 3 | [2][1] 5 | [3][1] 0
[0][2] 0 | [1][2] 1 | [2][2] 2 | [3][2] 0
[0][3] 1 | [1][3] 0 | [2][3] 0 | [3][3] 2
완전 탐색해야 결과가 나옴
[i][j] 순회하며 조건걸어서 찾는게 최선일까
구현
1차 시도 -> 외곽에 0을 채우기만 하면 되는거라고 문제파악을 잘못함
class Solution {
public boolean checkXMatrix(int[][] grid) {
boolean answer = true;
int n = grid.length;
for (int i = 0; i < n; i++){
if(!answer) break;
for(int j = 0; j < n; j++){
int temp = grid[i][j];
if(((i == 0 || i == n - 1) && (j != 0 && j != n-1)) || ((j == 0 || j == n - 1) && (i != 0 && i != n-1))){
if(temp != 0){
answer = false;
break;
}
} else {
if(temp == 0){
answer = false;
break;
}
}
}
}
return answer;
}
}
2차시도 (Runtime 2 ms | Memory 43.4MB)
class Solution {
public boolean checkXMatrix(int[][] grid) {
boolean answer = true;
int n = grid.length;
for (int i = 0; i < n; i++){
if(!answer) break;
for(int j = 0; j < n; j++){
int temp = grid[i][j];
if((i == 0 && j == 0) || (i == n-1 && j == n - 1) || (i + j == n-1) || (i == j)){
if(temp == 0){
answer = false;
break;
}
} else {
if(temp != 0){
answer = false;
break;
}
}
}
}
return answer;
}
}
회고
1ms
class Solution {
public boolean checkXMatrix(int[][] grid) {
int n = grid.length;
for(int i = 0; i < n; i ++) {
for(int j = 0; j < n; j ++) {
if(i == j || i + j == n - 1) {
if(grid[i][j] == 0) return false;
}
else if(grid[i][j] != 0) return false;
}
}
return true;
}
}
42.5 MB
class Solution {
public boolean checkXMatrix(int[][] grid) {
for (int row = 0; row < grid.length; row++)
for (int col = 0; col < grid.length; col++)
if (!isValid(row, col, grid))
return false;
return true;
}
private boolean isValid(int row, int col, int[][] grid) {
if (row == col) return grid[row][col] > 0;
if (grid.length-row-1 == col) return grid[row][col] > 0;
return grid[row][col] == 0;
}
}
'Algorithm > LeetCode' 카테고리의 다른 글
1920. Build Array from Permutation (0) | 2023.03.30 |
---|---|
1929. Concatenation of Array (0) | 2023.03.30 |
12. Integer to Roman (0) | 2023.03.07 |
278. First Bad Version (0) | 2023.03.03 |
35. Search Insert Position (0) | 2023.02.28 |